Проверьте, был ли Twisted Server запущен с Twistd был успешно запущен - PullRequest
3 голосов
/ 27 сентября 2011

Мне нужен надежный способ проверить, успешно ли запущен сервер на основе Twisted, запущенный через twistd (и файл TAC). Может произойти сбой, потому что некоторые параметры сети настроены неправильно. Поскольку я не могу получить доступ к журналу twistd (так как он записан в / dev / null, поскольку мне не нужны производимые log-clutter twistd), мне нужно выяснить, был ли сервер успешно запущен в скрипт запуска, который оборачивает вызов twistd.

Этот скрипт запуска представляет собой скрипт Bash, подобный следующему:

#!/usr/bin/bash
twistd \
  --pidfile "myservice.pid" \
  --logfile "/dev/null" \
  --python \
  myservice.tac

Все, что я нашел в сети, это хаки, использующие ps или что-то в этом роде . Но мне не нравится такой подход, потому что я думаю, что он ненадежен.

Так что я думаю о том, есть ли способ получить доступ к внутренним компонентам Twisted и получить все запущенные в настоящее время приложения Twisted? Таким образом, я мог бы запросить у запущенных в данный момент приложений имя моего приложения Twisted (как я его назвал в TAC-файле) для запуска.

Я также думаю о том, чтобы не использовать исполняемый файл twistd, а реализовать скрипт запуска на основе Python, который включает в себя содержимое twistd, например , ответ на этот вопрос дает , но я не знаю, это помогает мне получить статус сервера для работы.

Так что мой вопрос заключается в следующем: есть ли надежный, не уродливый способ узнать, был ли Twisted Server, запущенный с twistd, успешно запущен, когда регистрация twistd отключена?

1 Ответ

5 голосов
/ 27 сентября 2011

Вы явно указываете файл PID. twistd запишет свой PID в этот файл. Вы можете проверить систему, чтобы увидеть, есть ли процесс с этим PID.

Вы также можете повторно включить ведение журнала с помощью специального обозревателя журнала, который регистрирует только ваше событие запуска и удаляет все другие сообщения журнала. Затем вы можете посмотреть журнал событий запуска.

Еще одна возможность - добавить в ваше приложение еще один сервер, который предоставляет указанные вами внутренние компоненты. Затем попробуйте подключиться к этому серверу и осмотреться, чтобы увидеть то, что вы хотели увидеть (хотя тот факт, что сервер работает, все же является хорошим показателем того, что процесс запущен правильно). Если вы сделаете его «лазом», то получите возможность оценивать произвольный код Python, что позволяет вам проверять любое состояние в процессе, который вы хотите.

Вы также можете просто написать в своем коде приложения дополнительный файл состояния, который явно указывает на успешный запуск. Убедитесь, что вы удалили его перед запуском приложения, и у вас будет хороший показатель успеха против отказа.

...