daemon tools序列号(CentOS安装daemontools工具管理服务进程)
大家好,今天来为大家分享daemon tools序列号的一些知识点,和CentOS安装daemontools工具管理服务进程的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
最近工作中用到了daemontools工具来管理服务进程,再次总结下。当服务进程因为某些原因(包括kill)挂掉了,daemontools会重新启动这个进程
环境介绍:CentOS7.5x86_64位最小化安装
[root@git-server~]#wgethttp://cr.yp.to/daemontools/daemontools-0.76.tar.gz\\n[root@git-server~]#tarxfdaemontools-0.76.tar.gz\\n[root@git-server~]#cdadmin/daemontools-0.76/
编辑src/conf-cc文件在文件后面加入-include/usr/include/errno.h防止在后续编译安装过程中报错
[root@git-serverdaemontools-0.76]#vimsrc/conf-cc\\ngcc-O2-Wimplicit-Wunused-Wcomment-Wchar-subscripts-Wuninitialized-Wshadow-Wcast-qual-Wcast-align-Wwrite-strings-include/usr/include/errno.h
注意:下面的最后一条命令的package表示daemontools-0.76目录下的package目录,而不是一个package命令
[root@git-serverdaemontools-0.76]#sudopackage/install\\nLinking./src/*into./compile...\\nCompilingeverythingin./compile...\\nshfind-systype.sh>systype\\nrm-fcompile\\nshprint-cc.sh>compile\\nchmod555compile\\n./compilebyte_chr.c\\n。。。。。。。。\\n。。。。。。。。。\\nenv-/bin/shrts.tests2>&1|cat-v>rts\\nrm-fsysdeps\\ncatsystypecompileload>>sysdeps\\ngrepsysdepdirentry.h>>sysdeps\\ngrepsysdephaswaitp.h>>sysdeps\\ngrepsysdephassgact.h>>sysdeps\\ngrepsysdephassgprm.h>>sysdeps\\ngrepsysdepselect.h>>sysdeps\\ngrepsysdepuint64.h>>sysdeps\\ngrepsysdepiopause.h>>sysdeps\\ngrepsysdephasmkffo.h>>sysdeps\\ngrepsysdephasflock.h>>sysdeps\\ngrepsysdephasshsgr.h>>sysdeps\\nCopyingcommandsinto./command...\\nCreatingsymlinkdaemontools->daemontools-0.76...\\nMakingcommandlinksin/command...\\nMakingcompatibilitylinksin/usr/local/bin...\\nCreating/service...\\nAddingsvscanboottoinittab...\\ninitshouldstartsvscannow.\\n\\n查看inittab,在文件末尾可以看到这一行:\\n[root@git-serverdaemontools-0.76]#tail-1/etc/inittab\\nSV:123456:respawn:/command/svscanboot
之所以要使用sudo是因为,install脚本会在根目录/下创建两个目录:/service和/command目录。其中/service目录用来存放被daemontools管理的进程.注意在/service目录下存放的只能是连接。/command命令下存放的是daemontools的一些常用命令。
配置启动项,把csh-cf'/command/svscanboot&'加入到/etc/rc.local=>/etc/rc.d/rc.local末尾:开机自启动
[root@git-servercommand]#sed-i'$acsh-cf\\\\x27\\\\/command\\\\/svscanboot&\\\\x27'/etc/rc.local\\n[root@git-servercommand]#tail-2/etc/rc.local\\ncsh-cf'/command/svscanboot&'\\n\\n[root@git-servercommand]#sh/etc/rc.local\\n/etc/rc.local:line15:csh:commandnotfound
报错,于是安装csh命令
[root@git-servercommand]#yuminstalltcsh-y\\n[root@git-servercommand]#whichtcsh\\n/bin/tcsh\\n[root@git-servercommand]#whichcsh\\n/bin/csh
再次安装成功:
[root@git-servercommand]#sh-x/etc/rc.local\\n+bash/var/lib/subsys/local\\n+csh-cf'/command/svscanboot&'\\n[1]13689\\n[root@git-servercommand]#\\n[root@git-servercommand]#ps-ef|grepsvs\\nroot136891022:55pts/300:00:00/bin/sh/command/svscanboot\\nroot1369413689022:55pts/300:00:00svscan/service\\nroot137689451022:55pts/300:00:00grep--colorsvs
或者是直接后台运行
[root@git-serverservice]#/command/svscanboot&\\n[root@git-serverservice]#ps-ef|grepsvs\\nroot10447763022:37pts/200:00:00grep--colorsvs\\nroot304519451022:34pts/300:00:00/bin/sh/command/svscanboot\\nroot3045830451022:34pts/300:00:00svscan/service
从ps-ef|grepsvs的输出可以看到svscan作为svscanboot的子进程在运行。而且svscan监听的目录是/service目录。
daemontools是一个守护进程工具,防止用户进程意外退出。daemontools的工具有如下截图:
(1)svscanboot这个命令一般不用手动输入执行,因为这个一般会随Linux系统的启动而自动启动。于是加入开启自启动:/etc/rc.local就可以直到它会随Linux的启动而启动。svscanboot启动之后会启动svscan,svscan会启动supervise,supervise会启动并监听/service中存放服务目录下的run可执行文件。
(2)svscansvscan会为/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)supervisesupervise用来执行/service目录下服务的run脚本。如果run脚本退出的话,会每隔几秒执行一下。在/service下的服务目录s下会有一个supervise目录用来存放进程状态的二进制格式信息。svstate就会读取这个状态信息
[root@git-servernginx]#svstat/service/nginx\\n/service/nginx:up(pid19169)0seconds\\n[root@git-servernginx]#
(4)svc命令svcoptsservicesopts是一系列的参数,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:hangup,给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脚本。
Interfacesvcoptsservices\\noptsisaseriesofgetopt-styleoptions.servicesconsistsofanynumberofarguments,eachargumentnamingadirectoryusedbysupervise.\\nsvcappliesalltheoptionstoeachserviceinturn.Herearetheoptions:\\n-u:Up.Iftheserviceisnotrunning,startit.Iftheservicestops,restartit.\\n-d:Down.Iftheserviceisrunning,senditaTERMsignalandthenaCONTsignal.Afteritstops,donotrestartit.\\n-o:Once.Iftheserviceisnotrunning,startit.Donotrestartitifitstops.\\n-p:Pause.SendtheserviceaSTOPsignal.\\n-c:Continue.SendtheserviceaCONTsignal.\\n-h:Hangup.SendtheserviceaHUPsignal.\\n-a:Alarm.SendtheserviceanALRMsignal.\\n-i:Interrupt.SendtheserviceanINTsignal.\\n-t:Terminate.SendtheserviceaTERMsignal.\\n-k:Kill.SendtheserviceaKILLsignal.\\n-x:Exit.supervisewillexitassoonastheserviceisdown.Ifyouusethisoptiononastablesystem,you’redoingsomethingwrong;superviseisdesignedtorunforever.
(5)svstat
[root@git-serverservice]#ps-ef|grepsvs\\nroot136891022:55pts/300:00:00/bin/sh/command/svscanboot\\nroot1369413689022:55pts/300:00:00svscan/service\\nroot217657763023:06pts/200:00:00grep--colorsvs\\n查看服务的状态:\\n[root@git-servernginx]#svstat/service/nginx\\n/service/nginx:up(pid19169)0seconds四、举例演示:
配置一个服务非常简单:1)创建一个目录,目录下放一个run脚本2)run脚本执行启动服务的命令3)建立/service下一个链接
[root@git-serverservice]#mkdir/data/nginx-p\\n[root@git-serverservice]#cat/data/nginx/run\\n#!/bin/bash\\nexecservicenginxstart
停止nginx服务[root@git-servernginx]#servicenginxstop
[root@git-serverservice]#chmod+x/data/nginx/run\\n[root@git-serverservice]#ln-sv/data/nginx/service/nginx\\n`/service/nginx'->`/data/nginx'
神奇的就是最后一句,一旦创建了链接,daemontools就会自动帮你启动nginx服务了。刚才停掉的nginx服务,然后服务是否又被启动了:如下图:
停止对服务的监控:
[root@git-serverservice]#svc-d/service/nginx\\n[root@git-serverservice]#svstat/service/nginx\\n/service/nginx:down213seconds,normallyup\\n停止nginx服务后,nginx服务不再被重启\\n[root@git-servernginx]#servicenginxstop
如果不再需要daemontools守护某服务,可完成上述操作后,将/service下的对应目录删除。服务所在目录/service
开启对nginx服务的监控:
[root@git-serverservice]#svc-u/service/nginx\\n[root@git-serverservice]#svstat/service/nginx\\n/service/nginx:up(pid23563)1seconds
nginx服务再次被启动
[root@git-servernginx]#ps-ef|grepnginx\\nroot1369513689022:55pts/300:00:00readproctitleserviceerrors:...dyrunning.?Startingnginx...nginx(pid2336723366233652336423363)alreadyrunning.?Startingnginx...nginx(pid2336723366233652336423363)alreadyrunning.?Startingnginx...nginx(pid2336723366233652336423363)alreadyrunning.?Startingnginx...nginx(pid2336723366233652336423363)alreadyrunning.?Startingnginx...nginx(pid2336723366233652336423363)alreadyrunning.?\\nroot1374113694022:55pts/300:00:00supervisenginx\\nroot233631023:19?00:00:00nginx:masterprocess/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf\\nwww2336423363023:19?00:00:00nginx:workerprocess\\nwww2336523363023:19?00:00:00nginx:workerprocess\\nwww2336623363023:19?00:00:00nginx:workerprocess\\nwww2336723363023:19?00:00:00nginx:workerprocess\\nroot238209451023:20pts/300:00:00grep--colornginx
监控MHA的manager管理服务不间断提供服务:
[root@MQ2-S1masterha_app1]#cat/service/masterha_app1/run\\n#!/bin/sh\\nexecmasterha_manager--conf=/etc/masterha/app1.cnf--wait_on_monitor_error=60--wait_on_failover_error=60--remove_dead_master_conf--ignore_last_failover>>/var/log/masterha/app1/app1.log2>&1\\n[root@MQ2-S1masterha_app1]#chmod+x/service/masterha_app1/run
演示到此结束,很简单吧,伙伴们一看就会。
daemon tools序列号和CentOS安装daemontools工具管理服务进程的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!