## :-: 进程守护 进程守护我们这里使用的是[supervisor](http://supervisord.org/),是一个使用python编写的工具。 CentOS下面安装很简单: ``` yum install supervisor ``` 等待安装完成后,编写启动文件 目录:/etc/supervisord.d 在此目录下面新建一个配置文件:caiji.ini ``` #项目名 [program:caiji] #进程名称 process_name=%(program_name)s #启动的进程数量 numprocs=1 #脚本目录 directory=/mnt/hgfs/WWW/caiji #脚本执行命令(完整php路径) command=/www/server/php/72/bin/php think caiji #supervisor启动的时候是否随着同时启动,默认True autostart=true #当程序exit的时候,这个program不会自动重启,默认unexpected #设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的 autorestart=true #这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1 startsecs=1 #日志输出 stderr_logfile=/mnt/hgfs/WWW/caiji/runtime/supervisor/caiji_stderr.log stdout_logfile=/mnt/hgfs/WWW/caiji/runtime/supervisor/caiji_stdout.log #脚本运行的用户身份 user = root #把 stderr 重定向到 stdout,默认 false redirect_stderr = true #stdout 日志文件大小,默认 50MB stdout_logfile_maxbytes = 20MB #stdout 日志文件备份数 stdout_logfile_backups = 20 ``` supervisor 的init.d文件: /etc/init.d/supervisor ``` #!/bin/bash # # supervisord This scripts turns supervisord on # # Author: Mike McGrath <mmcgrath@redhat.com> (based off yumupdatesd) # # chkconfig: - 95 04 # # description: supervisor is a process control utility. It has a web based # xmlrpc interface as well as a few other nifty features. # processname: supervisord # config: /etc/supervisord.conf # pidfile: /var/run/supervisord.pid # # source function library . /etc/rc.d/init.d/functions RETVAL=0 start() { echo -n $"Starting supervisord: " daemon "supervisord -c /etc/supervisord.conf " RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/supervisord } stop() { echo -n $"Stopping supervisord: " killproc supervisord echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/supervisord } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart|force-reload|reload) restart ;; condrestart) [ -f /var/lock/subsys/supervisord ] && restart ;; status) status supervisord RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}" exit 1 esac exit $RETVAL ``` 相关命令: ``` service supervisor start|stop|restart supervisorctl start|stop|restart|reload 进程名称 supervisorctl status 查看状态 ``` <blockquote class="danger"> <p>init.d里面的文件记录给权限,不然没发启动</p> <p>supervisor的日志输出文件如果报错,就手动在对应目录创建空文件</p> </blockquote>