Supervisord не запускает убитые процессы - PullRequest
7 голосов
/ 26 октября 2011

У меня установлена ​​supervisord на моем Ubuntu 10.04, и он непрерывно запускает процесс Java и должен лечить (перезагружать) процесс, когда он каким-то образом умирает или падает.

На моем htop я посылаю сигналы SIGKILL, SIGTERM, SIGHUP, SIGSEGV этому процессу Java и наблюдаю файл /etc/logs/supervisord.log, и он говорит:

08:09:46,182 INFO success: myprogram entered RUNNING state,[...]
08:38:10,043 INFO exited: myprogram (exit status 0; expected) 

В 08:38 Я завершаю процесс с помощью SIGSEGV. Почему он завершается с кодом 0 и почему supervisord его вообще не перезапускает?

Все мои supervisord.conf об этой конкретной программе выглядят следующим образом:

[program:play-9000]
command=play run /var/www/myprogram/ --%%prod
stderr_logfile = /var/log/supervisord/myprogram-stderr.log
stdout_logfile = /var/log/supervisord/myprogram-stdout.log

Процесс работает очень хорошо, когда я запускаю supervisord, но не лечится.

Кстати, есть идеи, как запустить supervisord как сервис, чтобы он автоматически запускался при перезагрузке всей системы?

1 Ответ

12 голосов
/ 28 октября 2011

Попробуйте установить autorestart=true.По умолчанию автозапуск установлен на «неожиданный», что означает, что он только перезапустит процесс, если он существует с неожиданным кодом завершения.По умолчанию ожидается код завершения 0.

http://supervisord.org/configuration.html#program-x-section-settings

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

$ sudo apt-get install chkconfig
$ chkconfig -l supervisor
supervisor                0:off  1:off  2:on   3:on   4:on   5:on   6:off

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

$ man 7 runlevel

для получения дополнительной информации об уровнях запуска.

...