概述
什么是Supervisor?
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.
It shares some of the same goals of programs like launchd, daemontools, and runit. Unlike some of these programs, it is not meant to be run as a substitute for init as “process id 1”. Instead it is meant to be used to control processes related to a project or a customer, and is meant to start like any other program at boot time.
译文。
Supervisor是一个允许用户监控类UNIX操作系统上若干进程的C/S系统。
它虽然有一些类似于launchd,daemontools,以及runit的功能。但不像这些程序,它并不是以替身的形式运行的。相反它意在用于控制与一个工程或者一个资源消耗者相关的进程,当然它跟其他程序一样也是随系统启动而启动。
Ubuntu下安装Supervisor
以root身份,运行以下命令。
1 | > apt-get install supervisor |
启动服务即可。
1 | > supervisord |
一个简单的Shell
为了演示,我们写了如下Shell脚本(/home/test/long.sh)。
1 | do |
1 | > chmod +x /home/test/long.sh |
运行long.sh。会输出当前时间和『error!』字符串。这就是我们要交给Supervisor管理的Shell脚本。
Supervisor配置
Supervisor的默认配置文件是/etc/supervisor/supervisord.conf,同时,默认包含了/etc/supervisor/conf.d/路径下的所有.conf文件。
这里我们添加一个新的配置文件:/etc/supervisor/conf.d/long_script.conf文件,如下所示。
1 | [program:long_script] |
1 | [program:long_script] |
Supervisor管理的程序名为long_script。
脚本路径是/home/test/long.sh,Supervisor会去运行它。
1 | autostart=true |
autostart表示程序是否随系统启动而启动。
autorestart表示程序是否一停止了就立刻再启动。
1 | stderr_logfile=/home/test/long.err.log |
这两个文件是我们输出的日志文件。
启动Supervisor
配置文件创建好了之后,我们可以用supervisorctl命令告诉Supervisor新的程序已经添加好了。首先我们先告知Supervisor看看在/etc/supervisor/conf.d/路径下有没有新建或者更新的配置文件。
1 | > supervisorctl reread |
然后更新这些变化。
1 | > supervisorctl update |
如果不出意外的话能应该成功看到结果了。
1 | > tail /home/test/long.out.log |
1 | > tail /home/test/long.err.log |
几个常见的命令
1 | supervisorctl help # 帮助文档,输出所有命令列表;也可指定命令,查看具体帮助文档,如:supervisorctl help reread。 |
一点使用心得
Supervisor的日志文件路径在/var/log/supervisor/路径下。
Supervisor是一个C/S结构的程序,也就是说可以通过远程直接控制服务器上又Supervisor管理的程序,笔者对Supervisor这方面并不了解,不过出于安全考虑,笔者习惯不使用Supervisor的远程管理功能,通过SSH连接服务器后再对Supervisor管理的程序进行操作。