本文共 3158 字,大约阅读时间需要 10 分钟。
daemontools 相关的内容可参考 。
daemontools 相关的内容可参考 。daemontools 相关的内容可参考 。linux主要使用supervise来管理常驻进程。基于supervise的两个比较重要的工具是Daemontools和Supervisor。
实际上,supervise也算Daemontools的一个工具。Daemontools是svscanboot,svscan,supervise,svc,svok,svstat等一系列工具的合集。为什么使用Daemontools
参考Paste_Image.png
增加删除service只需要在/service中删除或增加link即可快速启动在/service中增加服务, 即可自动在五秒内完成启动可靠重启service down掉之后,自动重启简单可靠的控制配置好 /service 之后, 使用svc命令,可以控制service daemon。 比如:svc -h /service/yourdaemon:sends HUPsvc -t /service/yourdaemon:sends TERM, and automatically restarts the daemon after it dies*svc -d /service/yourdaemon:sends TERM, and leaves the service downsvc -u /service/yourdaemon:brings the service back upsvc -o /service/yourdaemon:runs the service once干净的进程状态重启的service进程,跟第一次启动的一样干净,纯洁无暇可移植通过配置 /service,程序能在各个linux系统(Linux, BSD, Solaris, etc)上,按相同的方式运行安装 和 使用NOTE: 必须使用 root 运行所有的东西Step 1 安装:
mkdir -p /packagechmod 1755 /packagecd /packagewget http://cr.yp.to/daemontools/daemontools-0.76.tar.gztar -xpf daemontools-0.76.tar.gzrm -f daemontools-0.76.tar.gzcd admin/daemontools-0.76package/install
如果 package/install 失败,则编辑 ./src/conf-cc文件,增加-include errno.h/:
ed ./src/conf-cc1s/$/ -include errno.h/wq
或者
vim ./src/conf-cc`增加gcc配置 -include errno.h
然后重试package/install安装
Step 2 启动:
启动 Daemontoolsapt-get install csh "(for Ubuntu/Debian users)"csh -cf '/command/svscanboot &'
设置 Daemontools 自启动(on system boot)
sed -i "1 a\csh -cf '/command/svscanboot &'" /etc/rc.localchmod +x /etc/rc.local
Step 3 创建service:
创建 Services 目录,并链接到 /service。 下例,创建服务 在 /servicesmkdir /servicesmkdir /services/somerandomserviceecho -e '#!/bin/sh\nexec somerandomcommand' > /services/somerandomservice/runchmod 755 /services/somerandomservice/runln -s /services/somerandomservice/ /service/
创建链接到 /service 目录, daemontools就会启动service, 这个时候可以检查service的uptime
svstat /service/somerandomservice
可以知道service的状态、pid和运行时间(note: 如果service的运行时间小于1秒,则可能是run脚本出错,需要调试) Step 4 指定用户:
使用特定用户运行service, 与上面的运行类似,不过要使用setuidgid 指定用户mkdir /services/somerandomuserserviceed /services/somerandomuserservice/runa#!/bin/shexec setuidgid somerandomuser somerandomcommand.w!chmod 755 %qln -s /services/somerandomuserservice/ /service/
(note: 以上使用ed编辑,也可以使用其他编辑,实现一样的目的)
除了通过指定uidgid,也可以通过全登录的方式:mkdir /services/somerandomuserserviceed /services/somerandomuserservice/runa#!/bin/shexec su - somerandomuser -c 'exec somerandomcommand'.w!chmod 755 %qln -s /services/somerandomuserservice/ /service/
Step 5 logger:
配置multilog, 来对service打loggeradduser loggermkdir /services/somerandomservice/logmkdir /services/somerandomservice/log/mainchown logger /services/somerandomservice/log/mained /services/somerandomservice/log/runa#!/bin/shexec setuidgid logger multilog t ./main.w!chmod 755 %q
Step 6 Debug:
检查 run 脚本cd /service/somerandomservicesvc -d ../run
检查,修复bug之后,使用svc -u /service/somerandomservice 启动服务
Step 6 检查日志:
cd /service/somerandomservicetail -n5 log/main/current
Step 7 重启service:
svc -t /service/somerandomservice
Step 8 删除service:
rm /service/somerandomservicesvc -dx /services/somerandomservice
作者:zoyanhui
链接:來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载于:https://blog.51cto.com/tenderrain/2067395