Использование chdir
в предложении скрипта
совершенно неправильно, и это означает, что вы не понимаете основную идею выскочки (не имелось ввиду ). (Кстати, ключевое слово exec
бесполезно, но не причиняет вреда.)
Это очень важная идея для понимания того, как работает выскочка. Upstart пытается определить, какой процесс из процессов, порожденных разделом сценария
, является фактическим демоном этой службы. Затем он использует этот процесс, чтобы определить, выполняется ли это задание, остановлено, завершилось неудачно или что-то еще. По этой причине крайне важно убедиться, что процесс выполняется правильно.
Алгоритм определения процесса очень прост, он зависит от строфы expect
. Ожидаемая вилка
означает " использование chdir
внутри скрипта
означает, что он вызывает фактический двоичный файл / bin / chdir
, и это считается отдельной вилкой. Что вам нужно сделать, так это переместить его за пределы строфы скрипта
и затем поиграть со строфой ожидайте
, пока вы не поймете все правильно. Вы можете проверить, правильно ли вы поняли, сравнив вывод initctl status celery
с ps
. PID должны совпадать.
chdir
внутри скрипта
означает, что он вызывает фактический двоичный файл / bin / chdir
, и это считается отдельной вилкой. Что вам нужно сделать, так это переместить его за пределы строфы скрипта
и затем поиграть со строфой ожидайте
, пока вы не поймете все правильно. Вы можете проверить, правильно ли вы поняли, сравнив вывод initctl status celery
с ps
. PID должны совпадать. Решением было не запускать Celery beat вместе с рабочим
(удаление части -B
из команды exec).
Очевидно, это был «лишний» процесс, который каким-то образом все испортил.
Вот последний сценарий, который у меня получился:
description "celery"
start on started postgresql
stop on runlevel [!2345]
kill timeout 20
setuid ***
setgid ***
respawn
chdir /opt/***/project/
exec /opt/***/virtualenvs/***/bin/python manage.py celery worker --settings=settings.staging -c 4 -l DEBUG
И запуск сельдерея
отдельно:
description "celerybeat"
start on started celery
stop on stopped celery
setuid ***
setgid ***
respawn
chdir /opt/***/project/
exec /opt/***/virtualenvs/***/bin/python manage.py celery beat --settings=settings.staging -l DEBUG