Python: как написать демон в Linux - PullRequest
3 голосов
/ 21 января 2011

У меня есть файл .py, которым управляет:

python a.py &

Я использую ssh для запуска команды, после чего мне нужно выйти из системы. Я нахожу через некоторое время процесс завершен. Я подозреваю, что Linux посылает сигнал? Я думаю, что если я смогу создать демона, то смогу избежать этого?

Ответы [ 5 ]

7 голосов
/ 21 января 2011

Хотя nohup будет работать, это быстрое и грязное решение. Чтобы создать правильный процесс демона, вам нужно использовать SysV init или (если вы используете Ubuntu 6.10+ или Fedora 9+) upstart.

Вот простой скрипт, который запускает a.py и перезапускает его всякий раз, когда его убивают (до 5 раз за 5 минут):

respawn

respawn limit 5 300

exec python /path/to/a.py

Тогда просто поместите этот скрипт в /etc/init/.

Upstart также имеет гораздо больше возможностей. Ознакомьтесь с руководством по Quick Start .

5 голосов
/ 21 января 2011

Эта реализация выглядит разумно: http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

4 голосов
/ 21 января 2011

Я был очень доволен daemonize.py от Brian Clapper, основанным на FreeBSD daemon(1):

http://software.clapper.org/daemonize/

http://github.com/bmc/daemonize

С января 2009 года существует PEP 3143 , который содержит ссылки на предлагаемую эталонную реализацию, цели разработки, цитаты (Стивенс) и другие источники.

3 голосов
/ 21 января 2011

Запустите его с помощью nohup, чтобы игнорировать сигналы при выходе из вашей оболочки:

nohup python a.py &
2 голосов
/ 29 августа 2011

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

Это означает, что вы можете настроить сеанс экрана (с выбранным вами именем), запустить программу внутри него (например, с помощью &), отсоединиться от сеанса и повторно подключиться позже.

Для запуска безымянного экрана.

$ screen

Чтобы создать новый сеанс с определенным именем, используйте:

$ screen -S backup

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

Если вы хотите выйти из сеанса, не прерывая его, используйте:

Ctrl+a d command (press and hold Ctrl, press and hold a, then press d) to detach from the session.

Чтобы увидеть список запущенных экранов:

$ screen -ls 

Чтобы прикрепить рабочий экран к консоли:

$ screen -R

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

ctrl+a d - detach the screen, and let it run without user interface (as described above)
ctrl+a c - create a new terminal
ctrl+a A - set the name of the current terminal
ctrl+a n - switch to next terminal
ctrl+a p - switch to prev terminal
ctrl+a " - list the of terminals
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...