飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

Supervisor守护进程管理工具-安装说明

Author:飘易 Source:飘易
Categories:Linux技术 PostTime:2019-4-1 15:50:56
正 文:

Supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了。此时被管理进程被视为supervisor的子进程,若该子进程异常中断,则父进程可以准确的获取子进程异常中断的信息,通过在配置文件中设置autostart=ture,可以实现对异常中断的子进程的自动重启。


Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。


因为Supervisor是Python开发的,安装前先检查一下系统否安装了Python2.4以上版本。下面以CentOS7,Python2.7版本环境下,介绍Supervisor的安装与配置步聚:


一、  安装supervisor


yum install python-setuptools
easy_install supervisor

supervisor安装完成后会生成三个执行程序:

supervisortd:是supervisor的守护进程服务(用于接收进程管理命令)
supervisorctl:客户端(用于和守护进程通信,发送管理进程的指令)
echo_supervisord_conf:生成初始配置文件程序



二、  配置supervisor


生成配置文件:

echo_supervisord_conf > /etc/supervisord.conf
mkdir -p /etc/supervisor/conf.d/

然后在 /etc/supervisord.conf 的 [include] 下添加:

[include]
files = /etc/supervisor/conf.d/*.conf


三、  开机自动启动


1.  脚本下载方式

下载 CentOS 使用的自动启动服务脚本 centos-systemd-etcs

wget -O /usr/lib/systemd/system/supervisord.service  https://github.com/Supervisor/initscripts/raw/master/centos-systemd-etcs


将 supervisord 服务设为自启动

systemctl enable supervisord.service


2.  自动启动(手动设置,推荐)

手动设置supervisor开机启动,配置systemctl服务,这种方式可以更多的控制启动配置项,比如指定加载目标路径下的配置文件。

a)  创建 /usr/lib/systemd/system/supervisord.service 

[Unit]
Description=Supervisor daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target


b)  设置开机启动

systemctl enable supervisord.service
systemctl daemon-reload #重载服务


可以通过下面的命令查看是否已开启成功:

systemctl list-unit-files|grep enabled


c)  修改文件权限为766

chmod 766 supervisord.service



四、  利用Supervisor部署LaravelS


通过Supervisord监管主进程, 前提是laravels不能加 -d选项并且设置swoole.daemonize为false, 因为supervisor无法管理后台运行的程序,需要程序为前台运行方式。


新建 /etc/supervisor/conf.d/laravels-jumi.conf 文件(注意,请将laravels版本升级到3.4.2):

[program:laravels-jumi]
command=/usr/local/php/bin/php /home/wwwroot/gps.piaoyi.org/bin/laravels start -i
numprocs=1
autostart=true
autorestart=true
startretries=3
user=root
redirect_stderr=true
stdout_logfile=/home/wwwroot/gps.piaoyi.org/storage/logs/supervisord-stdout.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=20



五、  启动Supervisor


1.  手动启动supervisor

supervisord -c /etc/supervisord.conf

可以通过下面的命令查看服务已启动:

pstree -p | grep supervisord

还可以查看log日志

cat /tmp/supervisord.log


2.  修改laravel-jumi配置文件后重新载入

supervisorctl reread
supervisorctl update
supervisorctl restart laravels-jumi


3.  修改 /etc/supervisord.conf后重新载入

#supervisorctl reload


4.  其他命令

supervisorctl start programxxx      启动某个进程  
supervisorctl stop programxxx       停止某个进程
supervisorctl restart programxxx    重启某个进程
supervisorctl start all     启动全部进程
supervisorctl stop all      停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl status            查看状态
supervisorctl shutdown      关闭supervisor



六、  LaravelS修改代码后自动Reload


基于inotify,仅支持Linux。

1.  安装inotify扩展

CentOS7里安装inotify方法:

yum --enablerepo=epel install inotify-tools


安装后检查是否安装成功:

# which inotifywait
/usr/bin/inotifywait
# /usr/bin/inotifywait --help
inotifywait 3.14


2.  开启配置项

'inotify_reload'           => [
        'enable'        => env('LARAVELS_INOTIFY_RELOAD', true),//生产环境建议设为false
        'watch_path'    => base_path(),
        'file_types'    => ['.php'],
        'excluded_dirs' => [],
        'log'           => true,
    ]


本文结束。


作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:没有了
下一篇:Python开发中的问题总结
0条评论 “Supervisor守护进程管理工具-安装说明”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有