Linux的后台进程运行有好几种方法,例如nohup,screen,upstart,systemd等,但是一个服务程序要可靠地在后台运行,就需要把它做成daemon,最好还能监控进程状态,在意外结束时能自动重启。
pm2
pm2 = P (rocess) M (anager)2,是可以用于生产环境的Nodejs的进程管理工具,它内置一个负载均衡,可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理、监控功能。
pm2的安装和使用
yum install -y npm
npm install -g pm2
pm2 start app.js
pm2 save
pm2 startup
pm2 reload all
pm2 list
pm2 restart [id]pm2 restart name1 --name name2 //修改名称后重新启动
pm2 log //查看日志,或后面跟项目id或名字查看指定日志
~# ls -a显示所有包括隐藏的文件,可以看到.pm2文件夹
更多pm2常用的命令用法介绍
http://i5ting.github.io/node-deploy-practice/
http://www.111cn.net/sys/linux/120062.htm
http://www.pangjian.info/2016/12/02/deploy-nodejs-pm2-1/?utm_medium=referral
Supervisor
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
配置解释:
[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 <topic>):
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version
Supervisor2.x版本有一些不同:
配置文件位置 /etc/supervisord.conf
需要在supervisord.conf尾部按示例添加服务配置
服务名称是 supervisord
sudo service supervisord restart
<h1>错误处理</h1>
报错 unix:///tmp/supervisor.sock no such file
出现上述错误的原因是supervisord并未正常启动,重新启动supervisord即可。
<pre>
supervisord -c /etc/supervisord.conf
或 supervisord -c /etc/supervisor/supervisord.conf
</pre>
更多配置参考
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