Pre:
Centos7不推荐使用rc.local
,推荐自己配service
但因为之前用惯了Cenos6,故一开始也沿用rc.local
.
后来rc.local
启的进程会导致系统无法正常快速的reboot
,然后就频繁断电操作(虽然是虚拟机)…导致系统的硬盘崩了…
为了更好的管理进程,所以选用supervisor
这个工具.
理由参考这篇文章的介绍(进程管理工具supervisor简介及使用技巧)
经常碰到要跑一些守护进程。平常我的做法是开一个tmux软件或者screen,然后启动软件。如果有其他人问,我则会建议用
nohup your-program &>nohup.log &
这种方式。可是这种做法毕竟不是长久之计,机器重启或者不小心kill了某个进程,后台运行的这个进程可能就不小心死掉了。
后来开源界的大牛建议我用supervisor。尝试之后,简直是如获至宝。作为一个存在了长达10年多的进程管理软件,他已经相当成熟。
Supervisor组成部分:
-
supervisord: 服务守护进程:
supervisor服务器的进程名是supervisord。它主要负责在自己的调用中启动子程序,响应客户端的命令,重新启动崩溃或退出的进程,记录其子进程stdout和stderr的输出,以及生成和处理对应于子进程生命周期中的"event"服务器进程使用的配置文件,通常路径存放在/etc/supervisord.confa中。此配置文件是INI格式的配置文件。 -
supervisorctl:命令行客户端:
supervisor命令行的客户端名称是supervisorctl。它为supervisord提供了一个类似于shell的交互界面。使用supervisorctl,用户可以查看不同的supervisord进程列表,获取控制子进程的状态,如停止和启动子进程 -
Web Server:提供与supervisorctl功能相当的WEB操作界面一个可以通过Web界面来查看和控制进程的状态,默认监听在9091上。
-
XML-RPC Interface:XML-RPC接口
supervisor用于控制的XML-RPC接口
安装&初始化:
1 | # 安装 |
1 | # 初始化配置文件 |
编辑配置文件:
编辑supervisord.conf
示例:
1 | [program:program_name] |
配置项有很多…
tips:
supervisor crash when config command include java “%t %p” variable
如果在运行的命令中有用到%
,会报格式错误.这个时候只需要双写%
即%%
就好了.
基本操作命令:
启停supervisor:
1 | # 启动 |
1 | # 停止 |
1 | # 重载 |
管理进程:
1 | # 启动 |
加入启动项:
centos7环境下
1 | # 创建文件 |
文件内容:
1 | # supervisord service for systemd (CentOS 7.0+) |
1 | # 设置权限 |
1 | # 激活开机启动命令 |
1 | # 启动supervisor进程 |
定期重启指定进程方法
Supervisor
配合crontab
可定期重启.
例:每小时重启进程abc
1 | 0 * * * * supervisorctl -c /etc/supervisord.conf restart abc |
总结:
初步使用的感觉是,配置起来不麻烦,要重启进程的话也很方便,不用在手打冗长的命令.
但是配置项不算少,要真正用得好,还是要在实践中慢慢定下适合自己程序的配置项.
配置项的介绍可以参考Supervisor文档