Linux守护进程 supervisor

Linux1年前 (2022)发布 yekei
64 0

supervisor是用Python开发的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。

它是通过 fork/exec 的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

安装配置 supervisor

安装 supervisor

# sudo su - #切换为root用户
# yum install epel-release
# yum install -y supervisor
# systemctl enable supervisord # 开机自启动
# systemctl start supervisord # 启动supervisord服务
# systemctl status supervisord # 查看supervisord服务状态
# ps -ef|grep supervisord # 查看是否存在supervisord进程

配置 Supervisor

\1. 修改 /etc/supervisord.conf 文件内容

; files = supervisord.d/*.ini
files = /etc/supervisor/conf.d/*.conf

\3. 在 /etc/supervisor/ 下创建 conf.d 文件夹,及 ProjectName.conf (以项目名称命名的),添加内容如下:

[program:laravel]
process_name=%(program_name)s_%(process_num)02d
command=php /data/wwwroot/laravel/artisan queue:listen --tries=3
autostart=true
autorestart=true
user=www
numprocs=2
redirect_stderr=true
stdout_logfile=/data/wwwlogs/worker.log
  1. 执行命令使配置文件生效
supervisorctl reread
supervisorctl update

\5. 重启 supervisord 或者修改了 /etc/supervisord.conf 执行

supervisorctl reload

运行

supervisorctl start laravel:*

查看运行状态

supervisorctl status
//提示RUNNING代表成功

查看进程 (ps -ef | grep ProjectName)

ps -ef|grep laravel

常用命令

service supervisord start   #启动
service supervisord stop    #停止
service supervisord status  #状态
supervisorctl reread
supervisorctl update
supervisorctl reload
supervisorctl status
supervisorctl shutdown  #关闭所有任务
supervisorctl stop|start program_name #启动或停止服务
supervisorctl status #查看所有任务状态


TP队列任务进程守护
[program:hy_menglar_com_global_push_task]
command=/usr/local/php/bin/php think queue:listen --queue=global_push_task
directory=/data/wwwroot/hy.menglar.com/menglahy/
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/data/wwwlogs/supervisor/hy_menglar_com_global_push_task.out.log
stderr_logfile=/data/wwwlogs/supervisor/hy_menglar_com_global_push_task.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=www
priority=999
numprocs=1
process_name=%(program_name)s_%(process_num)02d
 
© 版权声明

相关文章

暂无评论

暂无评论...