Linux下supervisor安装与使用
最近碰到一个需求,需要在后台不断运行一个进程用于接收消息队列里面的数据。一开始想要用 nohub 这种方式来运行这个进程,即:nohup COMMAND & 这样。不过这样有个问题,当进程处理异常,进程可能会死掉,网上查了下,发现 supervisor 管理进程更靠谱,而且异常退出有重启进程机制。
下面介绍 Linux 下 supervisor 的安装和配置,在安装前,先简单了解下什么是守护进程。守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。
supervisor 简介
supervisor 由 python 开发,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
supervisor 安装
wget https://files.pythonhosted.org/packages/44/60/698e54b4a4a9b956b2d709b4b7b676119c833d811d53ee2500f1b5e96dc3/supervisor-3.3.4.tar.gz tar -zxvf supervisor-3.3.4.tar.gz cd supervisor-3.3.4 python setup.py install
最后一步如果报错:
No local packages or download links found for meld3>=0.6.5
error: Could not find suitable distribution for Requirement.parse('meld3>=0.6.5')
解决办法:
#下载meld wget https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz#md5=3ccc78cd79cffd63a751ad7684c02c91 tar zxvf meld3-1.0.2.tar.gz cd meld3-1.0.2 python setup.py install
supervisor 配置
首先创建目录和配置文件:
mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf
然后修改 /etc/supervisor/supervisord.conf 的配置文件:
在文件结尾[include]节点处:
;[include] ;files = relative/directory/*.ini
把两个分号都去掉,记得[include]前面的分号注释也要去掉,然后 files = relative/directory/*.ini 修改为你自己想定义的目录,这里我改成这样:
[include] files = /etc/supervisor/conf.d/*.ini
就是在 /etc/supervisor/ 目录下再 mkdir 创建一个 conf.d 目录,然后这个目录里面的配置文件 .ini 是用来定义进程的配置文件。
接着打开 /etc/supervisor/conf.d 然后创建一个进程配置文件,比如 test.ini ,然后里面的定义如下:
[program:test] process_name=%(program_name)s_%(process_num)02d directory=/home/php/ command=/home/php/local/webserver/php722/bin/php -f test.php autostart=true autorestart=true user=root numprocs=1 redirect_stderr=true stdout_logfile=/home/php/test/test.log
上面 program 后面的 test 代表进程的名字,然后该进程的执行目录是 /home/php/ ,执行命令就是 /home/php/local/webserver/php722/bin/php -f test.php 。如果启动该进程,那么进程就会一直执行 /home/php/ 目录下的 test.php 文件。
supervisor 启动 && 常用命令
启动: supervisord -c /etc/supervisor/supervisord.conf 重启: supervisorctl reload 重启 修改配置文件后重新加载配置文件: supervisorctl update 启动某个进程: supervisorctl start program_name 查看正在运行的进程: supervisorctl status 关闭进程与supervisor: supervisorctl stop all kill -9 pid (pid 为 supervisord 进程号)
如果你已经配置了进程文件,那么 supervisord 启动时就会自动加载进程文件,然后启动守护你配置的进程。
本文地址:https://coderschool.cn/2881.html,转载请注明。