给大家推荐一款超强进程管理工具: Supervisor
为什么推荐?
当我们需要运行某些应用 并且希望常驻进程,百度 chrom推荐你使用 nohup命令 &
、 &!
、 screen命令
结果使用起来有时候会不好用 不好管理 多个进程同时维护又很麻烦等各种问题。
为什么推荐 Supervisor
?
- 易于管理:Supervisor提供了一个中央管理平台,可以方便地启动、停止、重启进程,而不需要手动进行各种复杂的操作。
- 故障恢复:如果一个进程崩溃,Supervisor会自动重启该进程,大大提高了系统的稳定性和可用性。
- 日志管理:Supervisor会自动管理进程日志,包括日志的生成、轮转、清理等,让你更加专注于程序本身的开发。
- 提高效率:对于需要长期运行的后台进程,使用Supervisor管理可以避免进程意外退出带来的问题,从而提高工作效率
- 跨平台:Supervisor支持多种操作系统,包括Linux、Mac OS和Windows,所以无论你使用什么系统,都可以利用Supervisor进行操作。
怎么食用?
-
Supervisor安装
我是centos系统 所以以此为例。# yum install 的方式 yum install -y supervisor
-
Supervisor的配置
如果使用yum install -y supervisor
的命令安装,会生成默认配置/etc/supervisord.conf
和目录/etc/supervisord.d
,如果没有则自行创建。
在/etc/supervisord.d
的目录下创建conf
和log
两个目录,conf
用于存放管理进程的配置,log
用于存放管理进程的日志。cd /etc/supervisord.d mkdir conf log
修改
/etc/supervisord.conf
的[include]
部分,即载入/etc/supervisord.d/conf
目录下的所有配置。vi /etc/supervisord.conf ... [include] files = supervisord.d/conf/*.conf ...
也可以修改supervisor应用日志的目录,默认日志路径为/var/log/supervisor/supervisord.log。
vi /etc/supervisord.conf ... [supervisord] logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) logfile_backups=10 ; (num of main logfile rotation backups;default 10) loglevel=info ; (log level;default info; others: debug,warn,trace) pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) ...
-
管理应用的配置
进入到
/etc/supervisord.d/conf
目录,创建管理应用的配置,可以创建多个应用配置。例如,创建
项目名称.conf
配置。[program:项目名称] directory = /usr/local/bin ; 程序的启动目录 command = python xiangmumingcheng.py ; 启动命令,与命令行启动的命令是一样的 autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = root ; 用哪个用户启动 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数 ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /etc/supervisord.d/log/confd.log ;日志统一放在log目录下 ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH ; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
-
Surpervisor的启动
# supervisord二进制启动 supervisord -c /etc/supervisord.conf # 检查进程 ps aux | grep supervisord
-
设置开机启动及systemd方式启动。
sudo chmod +x /etc/rc.d/init.d/supervisord sudo chkconfig --add supervisord sudo chkconfig supervisord on sudo service supervisord start
接下来可以使用该程序 启动 守护你的进程了
supervisorctl status 进程名 查看进程运行状态
supervisorctl start 进程名 启动进程没用
supervisorctl stop 进程名 关闭进程
supervisorctl restart 进程名 重启进程
supervisorctl update 重新载入配置文件 每次新增配置都需要执行该命令 配置没有改动的进程不会受影响而重启。
supervisorctl shutdown 关闭supervisord
supervisorctl clear 进程名 清空进程日志
supervisorctl 进入到交互模式下。使用help查看所有命令。
start stop restart + all 表示启动,关闭,重启所有进程。
下面是 supervisord 主程序的一些使用
supervisord,初始启动 Supervisord,启动、管理配置中设置的进程。
```bash
$ supervisord --help
supervisord -- run a set of applications as daemons.
Usage: /usr/bin/supervisord [options]
Options:
-c/--configuration FILENAME -- configuration file
-n/--nodaemon -- run in the foreground (same as 'nodaemon true' in config file)
-h/--help -- print this usage message and exit
-v/--version -- print supervisord version number and exit
-u/--user USER -- run supervisord as this user (or numeric uid)
-m/--umask UMASK -- use this umask for daemon subprocess (default is 022)
-d/--directory DIRECTORY -- directory to chdir to when daemonized
-l/--logfile FILENAME -- use FILENAME as logfile path
-y/--logfile_maxbytes BYTES -- use BYTES to limit the max size of logfile
-z/--logfile_backups NUM -- number of backups to keep when max bytes reached
-e/--loglevel LEVEL -- use LEVEL as log level (debug,info,warn,error,critical)
-j/--pidfile FILENAME -- write a pid file for the daemon process to FILENAME
-i/--identifier STR -- identifier used for this instance of supervisord
-q/--childlogdir DIRECTORY -- the log directory for child process logs
-k/--nocleanup -- prevent the process from performing cleanup (removal of
old automatic child log files) at startup.
-a/--minfds NUM -- the minimum number of file descriptors for start success
-t/--strip_ansi -- strip ansi escape codes from process output
--minprocs NUM -- the minimum number of processes available for start success
--profile_options OPTIONS --