如何使用supervisor托管守护进程?
阅读本文大概需要 2 分钟。
supervisor 通常情况下只能托管前台进程,如果想托管守护进程(daemon)的话,需要包装一层shell来实现,否则会出现BACKOFF Exited too quickly错误,导致一直重启进程; 这里不讲如何托管前台进程,下面具体说下如何实现托管守护进程,核心原理就是加一层shell,代理supervisor stop信号
操作如下
增加 /etc/supervisord.d/test.conf
[program:test]
command=sh /home/webroot/test/supervisor-wrapper.sh
directory=/home/webroot/test
autostart=false
startsecs=3
autorestart=true
startretries=10
增加 /home/webroot/test/supervisor-wrapper.sh
#! /usr/bin/env bash
set -eu
# 进程id文件,进程启动时需要写入进程id到此文件
pidfile="/home/webroot/test/your-daemon.pid"
# 真正的进程启动程序
command=/home/webroot/test/your-daemon
function kill_app(){kill $(cat $pidfile)exit 0 # 正常退出
}
# 代理 supervisor stop test
trap "kill_app" SIGINT SIGTERM
# Launch daemon
$command
sleep 2
# 持续判断进程是否存在
while [ -f $pidfile ] && kill -0 $(cat $pidfile) ; dosleep 0.5
done
# 进程不存在时异常退出,触发supervisor start test
exit 1000
验证
supervisor 启动test后,supervisor status 不出现
BACKOFFExitedtoo quickly
错误; 手动kill掉进程,supervisor能自动拉起进程,说明托管成功
总结
这种方法适合所有守护进程托管,不过类似nginx,php-fpm 默认都是以daemon防守启动,但本身支持前台方式启动,可以不用使用这种方式; 比如nginx 通过-g 参数控制前台启动: command=/home/nginx/sbin/nginx -g "daemon off;" -c /home/nginx/conf/nginx.conf 比如php 通过-F 参数控制前台启动:command=/home/php/sbin/php-fpm -c /home/php/etc/php.ini --fpm-config /home/php/etc/php-fpm.conf -F
码上行动
如何使用supervisor托管守护进程?相关推荐
- linux php 守护进程,PHP程序员玩转Linux系列 使用supervisor实现守护进程
PHP程序员玩转Linux系列文章: 首先遇到的问题是,部署nodejs的博客程序时,我把执行nodejs的命令放到后台,使用加&和nohup命令 如:nodejs index.js & ...
- ansible+Jenkins+supervisor(Jenkins守护进程)
安装的插件 ansible ,ansible+windows ,SDK,gradle 3.0,groovy,svn,git,ant,maven,java-1.8.0-openjdk 本博客所有的脚本都 ...
- linux 安装守护进程supervisor
linux的守护进程类似于windows的服务.linux通过supervisor创建守护进程. 1.安装supervisor sudo apt-get install supervisor -- u ...
- python守护进程进程池_Python—守护进程管理工具(Supervisor)
一.前言简介 1.Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程.可以很方便的用来启动.重启.关闭进程(不仅仅是 ...
- linux c++ 守护 程序,supervisor守护进程 | C/C++程序员之家
一.安装: sudo pip install supervisor sudo easy_install supervisor apt-get install supervisor yum instal ...
- Supervisor守护进程
Supervisor(http://supervisord.org/ )是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系 ...
- 守护进程二三事与Supervisor
守护的梦想 有时候我们在运行服务端系统的时候会遇到这样的问题,希望一个进程能常驻,而不是随着会话的结束而结束,常见如Mysql.Apache等web服务都有类似的需求. 这种不会随着会话退出而自己结束 ...
- 简述thinkphp自带队列think-queue的使用以及通过supervisor实现常驻进程
think-queue是thinkphp官方提供的一个消息队列服务,适用于大并发.返回结果时间较长.需要批量操作等专门支持队列服务的扩展包.例如短信发送.模板消息邮件等推送.可以进行发布.获取.执行. ...
- Supervisor守护Java进程_使用Supervisor来守护我们的服务
一.Supervisor简介 Supervisor是什么?Supervisor官网(http://supervisord.org/)上是这样描述的:Supervisor是一个进程控制系统,可以用来监视 ...
最新文章
- POJ 1523 SPF
- 扔掉工具类,Mybatis一个简单配置搞定数据加密解密!
- StoryBoard学习..(很详细.)
- Spark _16 _SparkUIMaster HA
- 图像、帧、片、NALU(firstime)
- 一篇夯实一个知识点系列--python实现十大排序算法
- python基础列表(四)
- nodejs之处理GET请求
- python3.8自带matlop和numpy吗_python3.8自带matlop和numpy吗_python之matloplib可视化
- ANDROID AIDL 1
- 1023. Have Fun with Numbers (20)
- 如何在开发时部署和运行前后端分离的JavaWeb项目
- python机器学习
- selenium+ocr 破解验证码
- ios 音频录音、上传至7牛、播放及其与android兼容的问题
- 用Python给你的头像加口罩,加圣诞帽,加红心,加加加
- java中方法重载和重写的区别
- 解决百度首页导航栏透明度问题
- 游戏开发资源列表 (转)
- 苹果手机突然闪退的7个原因及修复方法