在 Linux 中运行后台进程运行有很多方法,例如 nohup,screen 等。但如果想要可靠地在后台运行一个服务程序,就需要把它做成 daemon,最好还能监控进程状态,在意外结束时能自动重启。
supervisor 就是用 Python 开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
一、安装
以 CentOS 为例。
先安装 easy-install
yum install supervisor
二、生成配置文件
刚安装好默认是没有配置文件的,使用命令在 /etc 目录生成一个配置文件:
echo_supervisord_conf > /etc/supervisord.conf
三、编写应用程序的配置项
supervisor 通过每个应用程序的配置项管理进程。形如:
[program:app]
command=java -jar /usr/www/backend-0.0.1-SNAPSHOT.jar
autorestart=unexpected
autostart=true
user=root
startsecs=1
默认情况下所有应用程序的配置项是集中写在 supervisord.conf 里的,可以通过自定义配置文件目录为每个应用程序单独设置一个配置文件。打开 supervisord.conf,将最下面的 include 前面的 ; 去掉。
在 files 后面修改为自己想要放置配置文件的目录,配置文件一般都是 .ini 格式的文件,这样目录里面的文件就都能被 supervisor 读取到了。
每个应用程序单独写一个 ini 文件:
四、一些基本命令
1.启动 supervisor
supervisord
2.启动一个应用程序
supervisorctl start app
3.停止一个应用程序
supervisorctl stop app
4.查看应用程序的状态
supervisorctl status
5.重启 supervisor(每次添加新的配置文件都要重启才能生效)
supervisorctl reload
6.重启某个应用程序
supervisorctl restart app
7.添加日志
调试方法
使用 tail -f /var/log/supervisord.log 命令查看日志(路径要和/etc/supervisord.conf中配置的路径一致)
如果遇到报错 unix:///tmp/supervisor.sock no such file
第一个可能是没有运行,先运行
supervisord
试一下,如果提示
'Supervisord is running as root and it is searching ’
则问题已经解决。否则看下面。
1、打开配置文件
vim /etc/supervisord.conf
这里把所有的/tmp路径改掉,/tmp/supervisor.sock 改成 /var/run/supervisor.sock,/tmp/supervisord.log 改成 /var/log/supervisor.log,/tmp/supervisord.pid 改成 /var/run/supervisor.pid 要不容易被linux自动清掉
2、修改权限
sudo chmod 777 /run
sudo chmod 777 /var/log
如果没改,启动报错 IOError: [Errno 13] Permission denied: ‘/var/log/supervisord.log’
3、创建supervisor.sock
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
4、启动supervisord,注意stop之前的实例或杀死进程
supervisord