阅读本文大概需要 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托管守护进程?相关推荐

  1. linux php 守护进程,PHP程序员玩转Linux系列 使用supervisor实现守护进程

    PHP程序员玩转Linux系列文章: 首先遇到的问题是,部署nodejs的博客程序时,我把执行nodejs的命令放到后台,使用加&和nohup命令 如:nodejs index.js & ...

  2. ansible+Jenkins+supervisor(Jenkins守护进程)

    安装的插件 ansible ,ansible+windows ,SDK,gradle 3.0,groovy,svn,git,ant,maven,java-1.8.0-openjdk 本博客所有的脚本都 ...

  3. linux 安装守护进程supervisor

    linux的守护进程类似于windows的服务.linux通过supervisor创建守护进程. 1.安装supervisor sudo apt-get install supervisor -- u ...

  4. python守护进程进程池_Python—守护进程管理工具(Supervisor)

    一.前言简介 1.Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程.可以很方便的用来启动.重启.关闭进程(不仅仅是 ...

  5. linux c++ 守护 程序,supervisor守护进程 | C/C++程序员之家

    一.安装: sudo pip install supervisor sudo easy_install supervisor apt-get install supervisor yum instal ...

  6. Supervisor守护进程

    Supervisor(http://supervisord.org/ )是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系 ...

  7. 守护进程二三事与Supervisor

    守护的梦想 有时候我们在运行服务端系统的时候会遇到这样的问题,希望一个进程能常驻,而不是随着会话的结束而结束,常见如Mysql.Apache等web服务都有类似的需求. 这种不会随着会话退出而自己结束 ...

  8. 简述thinkphp自带队列think-queue的使用以及通过supervisor实现常驻进程

    think-queue是thinkphp官方提供的一个消息队列服务,适用于大并发.返回结果时间较长.需要批量操作等专门支持队列服务的扩展包.例如短信发送.模板消息邮件等推送.可以进行发布.获取.执行. ...

  9. Supervisor守护Java进程_使用Supervisor来守护我们的服务

    一.Supervisor简介 Supervisor是什么?Supervisor官网(http://supervisord.org/)上是这样描述的:Supervisor是一个进程控制系统,可以用来监视 ...

最新文章

  1. POJ 1523 SPF
  2. 扔掉工具类,Mybatis一个简单配置搞定数据加密解密!
  3. StoryBoard学习..(很详细.)
  4. Spark _16 _SparkUIMaster HA
  5. 图像、帧、片、NALU(firstime)
  6. 一篇夯实一个知识点系列--python实现十大排序算法
  7. python基础列表(四)
  8. nodejs之处理GET请求
  9. python3.8自带matlop和numpy吗_python3.8自带matlop和numpy吗_python之matloplib可视化
  10. ANDROID AIDL 1
  11. 1023. Have Fun with Numbers (20)
  12. 如何在开发时部署和运行前后端分离的JavaWeb项目
  13. python机器学习
  14. selenium+ocr 破解验证码
  15. ios 音频录音、上传至7牛、播放及其与android兼容的问题
  16. 用Python给你的头像加口罩,加圣诞帽,加红心,加加加
  17. java中方法重载和重写的区别
  18. 解决百度首页导航栏透明度问题
  19. 游戏开发资源列表 (转)
  20. 苹果手机突然闪退的7个原因及修复方法

热门文章

  1. 多元回归求解 机器学习_机器学习——算法第一课:回归分析
  2. autojs非按键精灵怎么做游戏脚本,来,给你游戏识图点击实例
  3. 无人机开源项目_8个开源无人机项目
  4. 斯诺克台球比赛规则 (Snooker)
  5. 百分之九十九的人所不知道的事
  6. Java软件工程师就业前景如何?
  7. Java获取URL链接的文件类型
  8. Cookie跨域的问题
  9. 怎样实现随机抽题php,ppt VBA 实现随机抽题
  10. php fck编辑器拿shell,Fck编辑器漏洞