supervisor是一个C/S系统,它可以在类UNIX系统上控制系统进程,由python编写,提供了大量的功能来实现对进程的管理。
1. supervisor 介绍
supervisor主要包含以下四个部分:
supervisord:
这个是supervisor服务的主要管理器,负责管理我们配置的子进程,包括重启崩溃或异常退出的子进程,同时也响应来自客户端的请求。
supervisorctl:
supervisord服务的客户端命令行。听过这个,我们可以获得由主进程控制的子进程的状态,停止和启动子进程,并获得主进程的运行列表。
Web Server:
supervisorctl功能娉美。这个是通过web界面查看和控制进程状态。
XML-RPC Interface:
服务于web UI的同一个HTTP服务器提供一个XML-RPC接口,可以用来询问和控制管理程序及其运行的程序
2. supervisor安装
1 | # 安装 |
3. supervisor配置
supervisor 是一个 C/S 模型的程序,supervisord是 server 端,对应的 client 端:supervisorctl
3.1 默认配置
运行echo_supervisord_conf
命令输出默认的配置项, 默认 supervisor 会使用 /etc/supervisord.conf 作为默认配置文件。
文件内可以看到如下配置, 所以自定义的配置文件可以放到/etc/supervisor/conf.d/
文件夹下.
1 | [include] |
3.2 应用程序配置
1 | [program:usercenter] # usercenter 是应用程序的唯一标识,不能重复。对该程序的所有操作(start, restart 等)都通过名字来实现。 |
3.3 使用
更新配置, 修改配置后需要更新
1
supervisorctl update
查看log, 直接查看配置里的log 即可
1
2stdout_logfile=/home/supervisor_log/uwsgi.log
stderr_logfile=/home/supervisor_log/uwsgi.log
4. supervisor 常用命令
1 | supervisorctl update #更新新的配置到supervisord(不会重启原来已运行的程序) |
5. systemd介绍
Systemd是Linux中的No.1进程, 可以用 systemd 管理 supervisor
Linux 操作系统的启动首先从 BIOS 开始,然后由 Boot Loader 载入内核,并初始化内核。内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程,也叫根进程。它负责产生其他所有用户进程。所有的进程都会被挂在这个进程下,如果这个进程退出了,那么所有的进程都被 kill 。如果一个子进程的父进程退了,那么这个子进程会被挂到 PID 1 下面。
2010的有一天,一个在 RedHat工作的工程师 Lennart Poettering 和 Kay Sievers ,开始引入了一个新的 init 系统—— systemd。这是一个非常非常有野心的项目,这个项目几乎改变了所有的东西,systemd 不但想取代已有的 init 系统,而且还想干更多的东西。
2014 年,Debian Linux 因为想准备使用 systemd 来作为标准的 init 守护进程来替换 sysvinit 。而围绕这个事的争论达到了空前的热度,争论中充满着仇恨,systemd 的支持者和反对者都在互相辱骂,导致当时 Debian 阵营开始分裂。
今天,systemd 占据了几乎所有的主流的 Linux 发行版的默认配置,包括:Arch Linux、CentOS、CoreOS、Debian、Fedora、Megeia、OpenSUSE、RHEL、SUSE企业版和 Ubuntu。而且,对于 CentOS, CoreOS, Fedora, RHEL, SUSE这些发行版来说,不能没有 systemd。
6. supervisor和 systemd 对比
6.1 supervisor
优点
1 可以通过网页执行启动停止的操作
2 单配置文件可控制多个程序
3 可控制进程数量
4 进程资源控制能力比较强缺点
1 本身需要被监控
2 开机自启依赖其他程序
3 不能跨主机
4 依赖于meld3、setuptools
5 进程需在前台运行
6.2 systemd
优点
1可使用模板文件
2 附带定时器、路径监控器、数据监控器等功能
3 比较弱的跨主机能力,节点必须互相添加ssh key信任,只能远程控制已有的服务
4 开机可以自启
5 大多数发行版的标准配置
6 配套journalctl二进制保存日志很难伪造,日志格式统一,日志大小可限制
7 限制特定服务可用的系统资源量例如CPU、程序堆栈、文件句柄数量、子进程数量缺点
1 多配置文件才能配置多个程序