最近在工作中用到了daemontools工具来管理服务进程。这里总结一下。
当服务进程因为某些原因(包括kill)挂掉了,daemontools会重新启动这个进程。

安装方法

wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar xvzf daemontools-0.76.tar.gz
cd admin/daemontools-0.76
sudo package/install

注意:上面的最后一条命令的package表示daemontools-0.76目录下的package目录,而不是一个package命令(我犯了这个错误,真是。。。,记录一下)。
之所以要使用sudo是因为,install脚本会在根目录/下创建两个目录:/service和/command目录。其中/service目录用来存放被daemontools管理的进程,注意在/service目录下存放的只能是连接。/command命令下存放的是daemontools的一些常用命令。
启动daemontools工具:

/command/svscanboot &

&后台运行
这时看下svs(supervise)的运行情况:

ps -ef | grep svs


这里解释下ps命令的参数ef。一直都在用ps -ef这个命令查看系统中运行的进程,都忘记参数ef的含义了。

从ps -ef | grep svs的输出可以看到svscan作为svscanboot的子进程在运行。而且svscan监听的目录是/service目录。
可以通过pstree -a -p 6927来看看进程树:

其中pstree的参数-a -p的含义如下所示:

daemontools的简单介绍

daemontools是一个守护进程工具,防止用户进程意外退出。daemontools的工具有:

常用的有以下5个:
(1)svscanboot
这个命令一般不用手动输入执行,因为这个一般会随Linux系统的启动而自动启动。像我在Mint17.2安装完daemontools之后会提示我重启系统,当然我没有重启系统,而是使用的上面的方式启动的。看下/etc/rc.local就可以直到它会随Linux的启动而启动:

设置某个进程随系统启动的方法可以参考这个:http://cr.yp.to/daemontools/start.html
svscanboot启动之后会启动svscan,svscan会启动supervise,supervise会启动并监听/service中存放服务目录下的run可执行文件。
(2)svscan
svscan会为/service目录下所有服务启动supervise进程。svscan会为每个服务启动一对supervise服务:一个s子目录(即服务进程的工程目录),其实是个软连接;一个是s子目录下的log目录(如果有的话)。supervise会执行s子目录下的run脚本,并监听run脚本启动的进程,同时会启动s/log目录下的run脚本。这个s/log目录下的run脚本用来输出s目录run脚本的日志到指定目录。svscan每隔5s检查下/service目录,如果有新的服务,则启动新的supervise;如果有supervise意外退出会重新启动supervise。
(3)supervise
supervise用来执行/service目录下服务的run脚本。如果run脚本退出的话,会每隔几秒执行一下。在/service下的服务目录s下会有一个supervise目录用来存放进程状态的二进制格式信息。svstate就会读取这个状态信息。

(4)svc命令
svc opts services
opts是一系列的参数,services是指/service下的服务目录。opts参数如下:
-u : up, 如果services没有运行的话,启动它,如果services停止了,重启它。
-d : down, 如果services正在运行的话,给它发送一个TERM(terminate)信号,然后再发送一个CONT(continue)信号,在它停止后,不再启动它。
-o : once, 如果services没有运行,启动它,但是在它停止后不再启动了。就是只运行一次。
-p : pause, 给services发送一个停止信号。
-c : continue, 给services发送一个CONT信号。
-h : hang up, 给services发送一个HUP信号。
-a : alarm, 给services发送一个ALRM信号。
-i : interrupt, 给services发送一个INT信号。
-t : Terminate, 给services发送一个TERM信号。
-k : kill, 给services发送一个KILL信号。
-x : exit, supervise在services停止后会立刻退出, 但是值得注意的是,如果你在一个稳定的系统中使用了这个选项,你已经开始犯错了:supervise被设计成为永远运行的。
关掉一个服务进程通常使用-dk参数,此时supervise进程并没有关闭,所以依然可以将这个服务进程重启。即使,supervice进程挂掉了,svscan依然会重启supervise,supervise会重新运行服务进程的run脚本
Interface svc opts services
opts is a series of getopt-style options. services consists of any number of arguments, each argument naming a directory used by supervise.
svc applies all the options to each service in turn. Here are the options:
-u: Up. If the service is not running, start it. If the service stops, restart it.
-d: Down. If the service is running, send it a TERM signal and then a CONT signal. After it stops, do not restart it.
-o: Once. If the service is not running, start it. Do not restart it if it stops.
-p: Pause. Send the service a STOP signal.
-c: Continue. Send the service a CONT signal.
-h: Hangup. Send the service a HUP signal.
-a: Alarm. Send the service an ALRM signal.
-i: Interrupt. Send the service an INT signal.
-t: Terminate. Send the service a TERM signal.
-k: Kill. Send the service a KILL signal.
-x: Exit. supervise will exit as soon as the service is down. If you use this option on a stable system, you’re doing something wrong; supervise is designed to run forever.
(5)svstat
查看服务的状态

参考资料:
1. 进程的守护神 - daemontools
2. 在CentOS 6.4上安装daemontools(守护进程工具)

daemontools的安装、简介相关推荐

  1. python3.7版本简介_python3.7.2各平台安装简介

    python3.7.2各平台安装简介 Python官网:https://www.python.org/ Python文档下载地址:https://www.python.org/doc/ Unix &a ...

  2. 《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis

    文章目录 8.Docker常规安装简介 8.1 docker常规安装总体步骤 8.2安装tomcat 8.3 安装mysql 8.3.1 docker hub上面查找mysql镜像 8.3.2 从do ...

  3. Python爬虫之Scrapy框架系列(1)——初识Scrapy框架【安装+简介+运行流程+组件介绍】

    目录: 1.Scrapy模块安装 2.Scrapy框架简介 2.1 Scrapy是个啥? 2.2 我们为啥要用这玩意呢? 3.运行流程 3.1 引入: 3.2 进入正题: 3.3 数据流: 3.4 中 ...

  4. linux软件安装简介(apt和dpkg)

    之前博文中提到过以源代码的方式来安装软件,也就是利用tarball进行软件的安装,但是比较麻烦,每次安装都需要检测操作系统与环境,设置编译参数,实际的编译等 如果我的linux系统和厂商的系统一模一样 ...

  5. wso2 安装_WSO2注册表安装简介

    wso2 安装 这篇文章基于有关注册表安装及其工作原理等常见问题.以下是人们提出的主要问题: 1). 安装如何工作? 2). Config Registry和Governance Registry有什 ...

  6. WSO2注册表安装简介

    这篇文章基于有关注册表安装及其工作方式等常见问题.以下是人们提出的主要问题: 1). 安装如何工作? 2). Config Registry和Governance Registry有什么区别? 3). ...

  7. MySQL-Front的安装简介

    本博文在作者的个人网站.博客园和CSDN同步发表,如要转载,请标明原作者和出处. 最近在学习MySQL数据库,开始的时候使用的Windows的命令行进行最基本的代码的输入,可是后来就觉得比较麻烦了,于 ...

  8. redis 安装简介

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的 ...

  9. wso2_WSO2注册表安装简介

    wso2 这篇文章基于有关注册表安装及其工作方式等常见问题.以下是人们提出的主要问题: 1). 安装如何工作? 2). Config Registry和Governance Registry有什么区别 ...

  10. 第八章 Docker常规安装简介

    1.总体步骤 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 服务端口映射 5.停止容器 6.移除容器 2.安装tomcat docker hub上面查找tomcat镜像 docker sea ...

最新文章

  1. Dsquery和Csvde命令的使用
  2. Python:图片懒加载技术
  3. php模拟socket一次连接,多次发送数据的实现
  4. Calendar类的常用成员方法
  5. SAP Spartacus table cell如何通过cxOutlet在运行时动态注入组件
  6. 谈谈我的程序人生程序生涯-飞鸽传书
  7. 在modelarts上部署mask-rcnn模型
  8. 《Linux 性能及调优指南》1.4 硬盘I/O子系统
  9. 抖音品质建设 - iOS启动优化《原理篇》
  10. Atitit java rest mvc微服务原理以及框架选型 目录 第一节 Mvc原理 model controler view 1 第二章 Spark 最简单 1 第一节 Sprbt to
  11. SysCeo_Win7_Classic_V7.8_32位+64位(6in1)纯净经典版
  12. dwg格式的计算机图,例举电脑dwg文件怎么打开
  13. 九、多线程(高琪java300集+java从入门到精通笔记)
  14. http网站快捷免费升级到https
  15. 我用二手书,在这里换了一大箱好书
  16. cp 出现 omitting directory
  17. 6.2 Characteristic Values
  18. uname命令使用和uname系统调用
  19. 华东交通大学计算机调剂,【通知】华东交通大学2020年硕士研究生调剂通知
  20. 蓝桥杯 Python 练习题 数字游戏

热门文章

  1. php 常见的视频格式转换
  2. 用selenium IDE编写自动化测试脚本
  3. 机器视觉硬件之工业相机(一)
  4. tpadmin导入数据库问题
  5. 温泉酒店加颜色透明matlab,通达信颜色透明代码,通达信,有条件的填充背景颜色,求源码...
  6. c51汇编语言如何定义全局变量_汇编语言程序访问C语言全局变量
  7. Oracle执行计划使用分析SQL执行效率
  8. c语言中动态内存分配的作用,C语言中动态内存的分配(malloc,realloc)
  9. 网站建设备案和不备案的一些疑惑问题大全
  10. Hexo Theme NexT 主题个性化配置最佳实践