有时候我们通过screen 可以让程序不会随着shell的关闭而关闭 ,虽然程序在执行 但是
在各种情况下 会有一些问题导致这个程序停止掉。在liunx上一些著名的开源程序提供一个
守护进程的方法 通过监听代码是否在执行 如果不再执行就自动重启他 从而保证服务的稳定
比如 php-fpm 这样的东西 , 但是当我们开发一个需要一直执行的脚本 如何能有一个守护进程
来保证服务的稳定呢?自己开发守护进程的成本太高 linux有一个提供这个功能的开源程序
supervisor 这里就总结下这个软件的使用

1 安装

安装

1
yum install supervisor -y

查看是否安装成功

1
service supervisord status

2 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim /etc/supervisord.conf

# 配置详解
[program:任务名称]
# 守护执行的命令
command=/root/test/shell/test
# 是否自动启动
autostart=true
# 是否自动重启
autorestart=true
startsecs=3
# 是否捕获错误
redirect_stderr=true
# 错误日志
stdout_logfile=/root/test/shellsupervisor.log
# 命令执行的用户 这里设置出错会导致权限问题
user=root

3 启动

服务端

1
2
3
service supervisord start
# 或者
supervisord

用户端

1
2
3
4
5
6
7
8
supervisorctl

supervisor> help # 帮助命令
supervisor> status # 查看任务状态
supervisor> start # 启动任务
supervisor> stop # 停止任务
supervisor> restart # 重启任务
supervisor> reload # 重新加载配置文件 修改配置文件一定要reload后才会生效

4 使用

比如我们创建一个每10分钟将当前时间写入到一个文件的shell
/root/test/shell/time

1
2
3
4
5
6
7
8
#!/bin/bash
while true
do
sleep 10
echo `date` >> time.log
done

给以执行权限

chmod u+x time

1
2
3
4
5
6
7
8
9
10
给所有人添加执行权限
chmod +x filename
给所有人添加执行权限
chmod a+x filename
给所属组添加执行权限
chmod g+x filename
给其他人添加执行权限
chmod o+x filename
给文件所属人添加执行权限
chmod u+x filename

测试执行命令
./time

加入到supervisor

1
2
3
4
vim /etc/supervisord.conf

[program:super_test]
command=/root/test/shell/time

执行客户端

1
2
3
4
5
6
# 进入客户端
supervisorctl
# 重新加载配置文件
reload
# 这时查看 这个任务已经启动 我们设置了自动启动
status

注意
配置里面的command命令要写全路径 suerpvisor有这样一个小bug

参考链接