Linux命令-supervisord(Supervisor 进程管理守护进程)

📅 2026/8/12 18:03:54
Linux命令-supervisord(Supervisor 进程管理守护进程)
Linux命令-supervisordSupervisor 进程管理守护进程快速参考安装与启动配置文件详解进程定义示例supervisorctl 管理命令常用配置选项事件监听实用示例Django Gunicorn Celery日志轮转配置Web 管理界面监控与告警supervisord是一个用 Python 编写的进程管理工具用于在 Unix/Linux 系统上监控和控制非守护进程化的长时间运行程序。它能够自动重启崩溃的进程、管理进程组、提供 Web 管理界面和 XML-RPC API。supervisord是 Python Web 应用如 Django、Flask、Celery和微服务架构中最常使用的进程管理器之一。快速参考supervisord[选项]supervisorctl[动作][参数...]supervisord是守护进程本身supervisorctl是其命令行管理客户端。安装后通过 ini 格式的配置文件定义被管理进程。安装与启动# 发行版包管理器安装sudoapt-getinstallsupervisor# Debian/Ubuntusudoyuminstallsupervisor# RHEL/CentOS# pip 安装获取最新版本sudopipinstallsupervisor# 验证安装supervisord--version# 生成默认配置文件echo_supervisord_conf/etc/supervisord.conf# 启动 supervisordsudosupervisord-c/etc/supervisord.conf# 指定配置文件和日志supervisord-c/etc/supervisor/supervisord.conf-l/var/log/supervisor.log# 前台运行调试用supervisord-n# systemd 管理推荐sudosystemctl start supervisorsudosystemctlenablesupervisor配置文件详解主配置文件/etc/supervisor/supervisord.conf[unix_http_server] file/var/run/supervisor.sock chmod0700 [supervisord] logfile/var/log/supervisor/supervisord.log pidfile/var/run/supervisord.pid childlogdir/var/log/supervisor userroot nodaemonfalse [supervisorctl] serverurlunix:///var/run/supervisor.sock [rpcinterface:supervisor] supervisor.rpcinterface_factory supervisor.rpcinterface:make_main_rpcinterface [inet_http_server] port127.0.0.1:9001 usernameadmin passwordadmin123 ; 引入子配置文件推荐做法 [include] files /etc/supervisor/conf.d/*.conf进程定义示例; /etc/supervisor/conf.d/app.conf [program:webapp] command/usr/bin/gunicorn -w 4 -b 0.0.0.0:8000 myapp:app directory/opt/myapp userwww-data autostarttrue autorestarttrue startretries3 redirect_stderrtrue stdout_logfile/var/log/myapp/app.log stderr_logfile/var/log/myapp/app_error.log environmentPATH/usr/local/bin:/usr/bin:/bin,APP_ENVproduction [program:celery_worker] command/usr/local/bin/celery -A myapp worker --loglevelinfo directory/opt/myapp userwww-data numprocs4 process_name%(program_name)s_%(process_num)02d autostarttrue autorestarttrue stdout_logfile/var/log/myapp/celery_worker.log [program:celery_beat] command/usr/local/bin/celery -A myapp beat --loglevelinfo directory/opt/myapp userwww-data autostarttrue autorestarttrue stdout_logfile/var/log/myapp/celery_beat.log [group:myapp] programswebapp,celery_worker,celery_beat priority999supervisorctl 管理命令# 查看所有进程状态supervisorctl status# 启动/停止/重启进程supervisorctl start webapp supervisorctl stop celery_worker supervisorctl restart all# 启动整个进程组supervisorctl start myapp:*# 查看进程日志尾部supervisorctltailwebapp supervisorctltail-fcelery_worker# 持续跟踪supervisorctltail-100webapp stderr# 查看 stderr# 重新加载配置不中断运行中的进程supervisorctl reread supervisorctl update# 重新加载配置后添加的新进程supervisorctl update# 查看单个进程详情supervisorctl status webapp# 进入交互式 Shellsupervisorctl# supervisor status# supervisor restart all# supervisor exit# 远程连接supervisorctl-shttp://admin:admin127.0.0.1:9001 status常用配置选项选项说明默认值command要执行的命令必填directory工作目录继承user运行用户继承autostart随 supervisord 启动trueautorestart自动重启unexpectedstartretries启动失败重试次数3startsecs启动后多少秒视为成功1numprocs启动的进程实例数1process_name多实例时的命名模板%(program_name)sredirect_stderrstderr 重定向到 stdoutfalsestdout_logfilestdout 日志文件路径AUTOenvironment环境变量继承priority启动/停止优先级999stopsignal停止信号TERMstopwaitsecs等待进程退出的秒数10umask文件创建掩码022事件监听[eventlistener:mylistener] command/usr/local/bin/supervisor_event_listener.py eventsPROCESS_STATE,TICK_5 autostarttrue autorestarttrue# 监听事件示例脚本cat/usr/local/bin/supervisor_event_listener.pyPYEOF #!/usr/bin/env python3 import sys def write_stdout(s): sys.stdout.write(s) sys.stdout.flush() def write_stderr(s): sys.stderr.write(s) sys.stderr.flush() def main(): while True: write_stdout(READY\n) line sys.stdin.readline() headers dict([x.split(:) for x in line.split()]) data sys.stdin.read(int(headers[len])) write_stderr(fEVENT: {headers}\nDATA: {data}\n) write_stdout(RESULT 2\nOK) if __name__ __main__: main() PYEOF实用示例Django Gunicorn Celerycat/etc/supervisor/conf.d/django_project.confEOF [program:django_gunicorn] command/opt/venv/bin/gunicorn -c gunicorn_config.py myproject.wsgi:application directory/opt/django_project userdjango autostarttrue autorestarttrue environmentDJANGO_SETTINGS_MODULEmyproject.settings.production [program:django_celery] command/opt/venv/bin/celery -A myproject worker -Q default,high_priority -c 4 directory/opt/django_project userdjango numprocs4 process_nameworker_%(process_num)02d autostarttrue autorestarttrue EOF日志轮转配置[program:log_managed_app] command/opt/app/bin/server stdout_logfile/var/log/app/server.log stdout_logfile_maxbytes50MB stdout_logfile_backups10 stderr_logfile/var/log/app/server_error.log stderr_logfile_maxbytes50MB stderr_logfile_backups10Web 管理界面[inet_http_server] port0.0.0.0:9001 usernameadmin passwordsecure_password访问http://server_ip:9001即可通过 Web 界面管理所有进程。监控与告警# 编写健康检查脚本cat/usr/local/bin/supervisor_health_check.shEOF #!/bin/bash FAILED$(supervisorctl status | grep -v RUNNING | wc -l) if [ $FAILED -gt 0 ]; then echo 以下进程非 RUNNING 状态 supervisorctl status | grep -v RUNNING # 发送告警可选 # curl -X POST https://hooks.slack.com/xxx -d textSupervisor进程异常 exit 1 fi echo 所有进程运行正常 ($(supervisorctl status | wc -l) 个) exit 0 EOF# CRON 定时检查# */5 * * * * /usr/local/bin/supervisor_health_check.sh部署建议使用[include]将每个应用的配置独立为一个文件生产环境应通过 systemd 管理 supervisord 本身启用 Web 管理界面时务必设置强密码和限制访问 IP配置stdout_logfile_maxbytes和stdout_logfile_backups防止日志撑满磁盘