守护进程(daemon)
守护进程是一类在后台运行的特殊进程,用于执行特定的系统任务。不少守护进程在系统引导的时候启动,而且一直运行直到系统关闭。另外一些只在须要的时候才启动,完成任务后就自动结束。php
nohup
nohup 是后台做业的意思, nohup运行的进程将会忽略终端信号运行。即后台运行一个命令。
nohup COMMAND & 用nohup运行命令可使命令永久的执行下去,和用户终端没有关系,例如咱们断开SSH链接都不会影响它的运行。python
supervisor
supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。laravel
以前一直使用nohup启动进程,以后接触了supervisor,感受更为合适,因此本身安装了一遍,简单记录了步骤:vim
一、安装supervisorspa
执行如下命令命令行
yum install python-setuptools easy_install supervisor
或者rest
#若是easy_install很差使就从官方下载: wget https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz #而后经过python安装: tar zxf supervisor-3.3.1.tar.gz cd supervisor python setup.py install
二、配置Supervisorcode
a.建立文件夹和配置文件进程
mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf
b.修改/etc/supervisor/supervisord.conf文件内容
在文件结尾[include]节点处
把;files = relative/directory/*.ini
改成files = conf.d/*.conf图片
c.若supervisor已经启动,须要执行supervisorctl reload命令使配置文件生效。
d.在/etc/supervisor/下建立conf.d文件夹,及ProjectName.conf(以项目名称命名的)
e.打开laravel.conf文件,添加内容以下:
[program:laravel] process_name=%(program_name)s_%(process_num)02d command=/usr/local/php/bin/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
三、运行supervisord,查看是否生效,执行如下命令:
#运行 supervisord -c /etc/supervisor/supervisord.conf #查看进程 (ps -ef | grep ProjectName) ps -ef|grep laravel
四、配置supervisord开机启动
a.在指定目录下建立文件supervisord.service
vim /usr/lib/systemd/system/supervisord.service
b.输入如下内容:
[Unit] Description=Supervisor daemon [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
c.执行如下命令:
systemctl enable supervisord
d.验证是否为开机启动:
#提示 enabled 表示成功 systemctl is-enabled supervisord
五、经常使用命令
service supervisord start #启动 service supervisord stop #中止 service supervisord status #状态 supervisorctl shutdown #关闭全部任务 supervisorctl stop|start program_name #启动或中止服务 supervisorctl status #查看全部任务状态