2015-03-08 5 views
1

После запуска системы мой скрипт начинается с crontab в качестве демона. Он работает некоторое время и приостанавливает/зависает без ответа. После этого я не могу запустить его как sudo python script.py restart, потому что он говорит: File "/usr/lib/pymodules/python2.7/daemon/runner.py", line 149, in _stop "PID file %(pidfile_path)r not locked" % vars()) daemon.runner.DaemonRunnerStopFailureError: PID file '/home/pi/testdaemon.pid' not lockedОшибка блокировки PID от Daemon

В инициализации из сценария есть:

def __init__(self): 
    self.stdin_path = '/dev/null' 
    self.stdout_path = '/dev/null' 
    self.stderr_path = '/dev/null' 
    self.pidfile_path = '/home/pi/testdaemon.pid' 
    self.pidfile_timeout = 5 

Любая идея решения этой проблемы было бы здорово!

EDIT:

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

+0

Вы можете взглянуть на [pandaemonium] (https://pypi.python.org/pypi/pandaemonium) для части демона - у него довольно хорошая поддержка отладки. Полное раскрытие: я автор 'pandaemonium'. –

ответ

1

Я не могу сказать почему ваш скрипт висит - но, по-видимому, его процесс все еще вокруг, поэтому очистка никогда не происходит. Вы можете принудительно выполнить очистку, изучив /home/pi/testdaemon.pid, проверяя, что идентификатор процесса, который он содержит, действительно все еще работает, убивая этот процесс (при необходимости -9), и, только для полноты, удаляет /home/pi/testdaemon.pid.

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

+0

К сожалению, мой скрипт не висит, но останавливается. Пока он работает, я могу видеть 'testdaemon.pid' и' testdaemon.pid.lock', но после короткого времени он останавливается, и эти файлы больше недоступны. Так что с одной стороны - он запускается при запуске и как-то падает, а с другой стороны я не могу запустить/перезапустить его после сбоя из-за ошибки, которую я вставил в первый пост. Я надеюсь, что после управления этой ошибкой я смогу справиться с сбоем сценария. Или задайте другой вопрос, как вы предложили. –

Смежные вопросы