2011-10-26 234 views
6

我在我的Ubuntu 10.04上安装了supervisord,并且它不断运行Java进程,并且在它以某种方式死亡或崩溃时应该恢复(重新加载)进程。Supervisord不会启动死亡进程

在我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关于这个具体方案如下:当我启动supervisord

[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作为服务,以便它在整个系统重新启动时自动启动的任何想法?

回答

11

尝试设置autorestart=true。默认情况下,autorestart设置为“意外”,这意味着如果存在意外的退出代码,它将仅重新启动一个进程。默认情况下,预计退出代码为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 

有关运行级别的更多信息。

+0

非常棒!我正在寻找这个'autorestart'设置。我期待它默认为'true',然后我迷失在文档中。顺便说一句,我认为'chkconfig'需要一个进程是一个服务,然而'supervisord'不是一个服务,因此'chkconfig -l'命令不适用于我,并且说'supervisor:无法识别的服务'。你对此有什么看法? –

+1

你是如何安装主管的?如果您使用apt-get,那么它将作为服务安装,至少对于Ubuntu 10.04来说。 –

+0

它在10.04上,我想我使用'easy_install'安装了它。感谢您注意到这一点。 –