我在我的Ubuntu 10.04上安装了supervisord
并且它连续运行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作为服务启动,以便在整个系统重启时自动启动?
答案 0 :(得分:12)
尝试设置autorestart=true
。默认情况下,autorestart设置为“unexpected”,这意味着只有在存在意外退出代码的情况下才会重新启动进程。默认情况下,退出代码为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
了解有关运行级别的更多信息。