什么是守护进程
在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。
守护进程的作用
守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)。
Supervisor 介绍
Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态,在意外结束时能自动重启。supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
Supervisor 安装
安装
> yum install python-setuptools
> easy_install supervisor
或者
> wget http://pypi.python.org/packages/source/s/supervisor/supervisor-3.0b1.tar.gz
> tar -zxvf superviosr-3.0b1.tar.gz
> cd superviosr-3.0b1
> python setup.py install
创建 supervisor 配置文件
- 运行
echo_supervisord_conf命令生成配置文件模板supervisord.conf并放到/etc/目录下
echo_supervisord_conf > /etc/supervisord.conf
-
编辑
supervisord.conf,取消文件最后[include]注释,并修改对应文件夹/usr/local/supervisor/conf/*.ini可存放用户自定义任务配置文件;
-
在
/usr/local/supervisor/conf新建自定义任务配置文件
> vim mytask.ini
# 文件内容
[program:myTaskName]
command=php -m
directory=/home
autorestart=true
autostart=true
stderr_logfile=/home/logs/supervisor/myTaskName.err.log
stdout_logfile=/home/logs/supervisor/myTaskName.out.log
user=root
startsecs=1
- 管理supervisor
# 启动
supervisord -c /etc/supervisord.conf
# 停止
supervisorctl shutdown
# 重新加载配置
supervisorctl reload
- 管理进程
# 更新任务
supervisorctl update
# 开启全部任务
supervisorctl start all
# 停止全部任务
supervisorctl stop all
# 重启全部任务
supervisorctl restart all
# 查看任务状态
supervisorctl status all
开机自启
新建文件supervisord.service
#supervisord.service
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
将文件拷贝到/usr/lib/systemd/system/
cp supervisord.service /usr/lib/systemd/system/
启动服务
systemctl enable supervisord
验证一下是否为开机启动
systemctl is-enabled supervisord