supervisor

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

简单的后台运行

#查找并杀死8080端口的服务
kill -9 $(netstat -nlp | grep :8080 | awk '{print $7}' | awk -F"/" '{ print $1 }')
#运行java服务
nohup java -jar racing-web-1.0.jar &

在ssh窗口中执行完nohup语句后,只需要回车,即可解脱窗口锁定。

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,能做开机启动,并监控进程状态,异常退出时能自动重启,它还提供了web管理界面。

安装supervisor
$ sudo apt-get install supervisor
卸载supervisor
$ sudo apt-get remove supervisor
安装完成后,查看其配置文件
$ vi /etc/supervisor/supervisord.conf
查看到自定义配置存放目录为 files=/etc/supervisor/conf.d/*.conf
$ cd /etc/supervisor/conf.d
创建要自启动的服务配置
$ sudo vi service1.conf

https://pypi.org/project/supervisor/

配置解释:

[program:service1] #服务名称,在supervisor中可以用这个名字来管理该程序。
command=  #启动程序的命令
directory=/home/user1 #相当于在该目录下执行程序
autostart=true #设置随supervisor的启动而启动
autorestart=true #程序停止之后是否需要重新将其启动
startsecs=10 #重新启动时,等待的时间
startretries=36 #重启程序的次数
redirect_stderr=true #是否将程序错误信息重定向的到文件
stdout_logfile=/home/user1/%(program_name)s_log.txt #将程序输出重定向到该文件
stderr_logfile=/home/user1/%(program_name)s_err.txt #将程序错误信息重定向到该文件
numprocs = 2
numprocs_start = 8850
user = #系统用户名
process_name = 163gs-%(process_num)s

配置好后重启supervisor服务

sudo service supervisor restart

supervisorctl 是命令行管理工具,它的查数查看

supervisorctl help
supervisorctl version
default commands (type help ):
=====================================
add    clear  fg        open  quit    remove  restart   start   stop  update 
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version

更新配置到 supervisord:

supervisorctl update

Supervisor2.x版本有一些不同:

配置文件位置 /etc/supervisord.conf
需要在supervisord.conf尾部按示例添加服务配置
服务名称是 supervisord
sudo service supervisord restart

更多配置参考
nohup和&后台运行,进程查看及终止
https://www.cnblogs.com/baby123/p/6477429.html
https://blog.phpgao.com/supervisor_shadowsocks.html
https://www.cnblogs.com/lianer/p/5560922.html
http://supervisord.org/configuration.html
http://www.jianshu.com/p/65f31f5a4e84
http://www.jianshu.com/p/805977544d7f
http://www.linuxidc.com/Linux/2015-04/116701.htm
http://www.cnblogs.com/haoliansheng/p/6611714.html
http://www.cnblogs.com/zhangym/p/5833353.html

错误处理

执行supervisorctl命令,报错 unix:///tmp/supervisor.sock no such file,说明supervisord并未正常启动,原因是在supervisor默认配置中,其启动的sock等都会放到tmp目录,而tmp目录会自动清理导致无法正常启动。

supervisord -c /etc/supervisord.conf
或 supervisord -c /etc/supervisor/supervisord.conf

ubuntu 18.04中 apt找不到supervisor源,修改Ubuntu的apt-get源为国内镜像源。
https://blog.csdn.net/zgljl2012/article/details/79065174/

发表评论