Найти - Пользователи
Полная версия: Демон или скрипт на python закрываются в бекграунде.
Начало » Python для экспертов » Демон или скрипт на python закрываются в бекграунде.
1
Jeck290
Имеем вот такой вот скрипт http://pastebin.com/p84VSV5X . Каждые 60 секунд скрипт заходит на сервер проверяет MAC адреса и сбрасывает их , такая работа должна продолжаться постоянно. Но проблема в том что после запуска скрипта и отправки его в бекграунд python daemon4.py& скрипт работает пока я не закрою окно pytty после этих действий все останавливается , пробовал писать демон такая же проблема , скрипт работает от часа до шести и завершает работу без видимых причин , если запустить программу у себя на компьютере то все работает работает без нареканий проверял целые сутки . Может кто чего подскажет ?
leechuck
запустите в скрине !
думаю, этот вариант Вам подойдет ! :)

screen
python daemon4.py
Cnrl-A
d
Jeck290
Да действительно , помогло , работает , но в чем причина была ?
masterito
2 раза fork сделайте и получите демон.
Oik741
Jeck290
Да действительно , помогло , работает , но в чем причина была ?
Причина была в том что ваш скрипт стал “дочерним” процессом вашего “терминала”, после того как вы выходите с машины, процесс который обслуживал ваш терминал умирает, и все его дочернии процессы

screen'ом вы просто в качестве демона запускаете ваш терминал, с возможностью подключиться к нему в дальнейшем

например:
screen -AR
подключит вас к вашей прошлой сессии(при условии что она одна)

перманентным решением может быть добавление скрипта в /etc/init.d/ (пример для Debian'а, в других системах может быть подругому)
и написав
insserv SCRIPT_NAME
в таком случае родительским процессом вашего скрипта станет INIT(0-ой процесс в системе, который есть всегда)

либо вручную запустив скрипт таким образом:
nohup python my_daemon.py &
таким образом процесс будет игнорировать сигналы от родителя и превратится в зомби после его смерти
что черевато захламление системы процессами(т.к. зомби без родителя не может завершить свои цикл существования)
agryn
А я вот пользуюсь таким способом отправки в бекграунд:
echo "you/script/path.py" | at now
Для работы необходимо что б была установлен и запущена утилита atd (демон), но это добро практически всегда есть на nix. Работает после закрытия ssh. Плюс: можно эту же конструкцию встроить в bash/python скрипт.
Singularity
как вариант http://supervisord.org/ или нет ?
Jeck290
Попробовал решения которые вы предлагали , возникла одна проблема , если конект к серверу пропадает а это уже False то цикл While просто перестает работать , как можно зациклить цикл ?
JOHN_16
Jeck290
как можно зациклить цикл ?
правильный вопрос содержит половину ответа…а тут все 100%. намек ясен?
Jeck290
Не совсем (( , может хоть намек ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB