supervisor

[TOC]

supervisor

Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态,在意外结束时能自动重启。

supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

常用命令

控制命令基本都通过supervisorctl执行,输入help可以看到命令列表。这是一些常用命令:

  • 获得所有程序状态 supervisorctl status

  • 关闭目标程序 supervisorctl stop spider

  • 启动目标程序 supervisorctl start spider

  • 关闭所有程序 supervisorctl shutdown

    安装

    Debian / Ubuntu可以直接通过apt安装:

    apt-get install supervisor

    说明文档

    Supervisor组件

    supervisord

    supervisor的服务部分叫做supervisord.

    使用

    给我们自己开发的应用程序编写一个配置文件,让supervisor来管理它。每个进程的配置文件都可以单独分拆,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名,例如,app.conf定义了一个gunicorn的进程:

    [program:app]
    command=/usr/bin/gunicorn -w 1 wsgiapp:application
    directory=/srv/www
    user=www-data

    其中,进程app定义在[program:app]中,command是命令,directory是进程的当前目录,user是进程运行的用户身份。

重启supervisor,让配置文件生效

然后运行命令supervisorctl启动进程:

停止进程:

如果要在命令行中使用变量,就需要自己先编写一个shell脚本:

然后,加上x权限,再把command指向该shell脚本即可。

日志

常见问题

supervisor.sock文件不存在

问题重现

解决方案

  • 重启supervisor服务

    sudo service supervisor restart

设置优先权

配置文件

配置项

说明

file=/tmp/supervisor.sock

socket文件的路径,supervisorctlXML_RPCsupervisord通信就是通过它进行的。如果不设置的话,supervisorctl也就不能用了 不设置的话,默认为none。 非必须设置

chmod=0700

修改上面的那个socket文件的权限为0700

chown=nobody:nogroup

这个一样,修改上面的那个socket文件的属组为user.group, 不设置的话,默认为启动supervisord进程的用户及属组。非必须设置

username=user

使用supervisorctl连接的时候,认证的用户. 不设置的话,默认为不需要用户。 非必须设置

示例详解1

示例详解2

最后更新于

这有帮助吗?