daemontools & supervise

daemontools & supervisevim

daemontools工具

概念:daemontools是用来监控进程的工具。

安装daemontools:
	# 下载包
	wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
	# 解压
	tar -zxvf daemontools-0.76.tar.gz

	# 编译。	注意:安装过程当中须要建立/service和/command目录,故须要root权限。
	cd admin/daemontools-0.76
	sudo package/install

	# 此时会报错 "/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o"
	# 解决:在 src/conf-cc 第一行的最后加上" -include /usr/include/errno.h" 后,从新执行 package/install 便可。

启动daemontools:
	/command/svscanboot &
	# 说明:
		经过"ls /command/"能够看到daemontools下的命令,svscanboot启动以后会启动svscan,svscan启动后会启动supervise。
		svscan每隔5s会去检查/service目录,若是有新的服务,则启动新的supervise;若是有supervise意外退出会重启supervise(注:若supervise是正常退出的,则不会重启)。
	

验证:
	ps aux | grep svscan

	# 若查询到以下进程,则表示启动成功。
	/bin/sh /command/svscanboot
	svscan /service


daemontools中的supervise命令:

	概念:supervise命令用来监控指定的进程,当监控的进程挂掉后,supervise会自动重启该进程。

	格式:supervise xxxx/xxxService	# xxxx/xxxService是一个目录,supervise会监控这个目录,该目录下必须包含名称为run的文件。

	使用:
		第一步:建立服务目录,准备run文件

			举例:建立服务目录:/home/work/jxn-test/agent ,将要监控的进程的启动命令须要放到run文件中:

				vim /home/work/jxn-test/agent/run
				#!/bin/sh
				sh realCmd.sh
				# 注意:
				#	1>服务的启动命令,不能是nohup启动的,由于nohup执行的太快了,最后致使nohup正常结束后,supervise认为nohup进程挂掉了,故会不断地去运行run。
				#	2>必须在run脚本的开头写上 #!/bin/sh ,不然报错:supervise: fatal: unable to start /home/work/jxn/my-service/run: exec format error

				# 给run文件添加执行权限
				chmod 755 run

				# 创建连接,方便管理和查看。
				ln -sf /home/work/jxn-test/agent /service/


		第二步:启动监控

				启动监控:svc -u /home/work/jxn-test/agent  (或:svc -u /service/agent)
				关闭监控:svc -d /home/work/jxn-test/agent
				关闭监控而且中止服务:svc -dk /home/work/jxn-test/agent

				说明:svc命令是用来控制那些被supervise监控的服务的。svc是间接控制服务的,它其实是经过控制supervise来控制服务。

				格式:svc 参数 xxxx/xxxService

				参数:
					-u 	 	up,启动对该服务的监控。
								注:也能够直接使用supervise命令来启动监控:nohup supervise /home/work/jxn-test/agent > svsrun.log 2>&1 &
					-d 	 	down,中止对该服务的监控,即中止supervise对该服务的监控。
								注:服务不会所以而关闭,若咱们要关闭服务,则使用-k参数或手动kill掉服务。
					-o 		once,若是该服务没有运行,则启动该服务,以后若该服务挂掉了,supervise也不会再去启动该服务了。
					-k 		kill,给服务发送一个KILL信号。
					-x 		exit,中止对该服务的监控,而且中止该服务的supervise进程,该服务对应的supervise进程中止后,咱们就没法使用svc命令了。	
								注意:咱们通常不会使用该参数!若是服务对应的supervise进程被停掉(svc -x 服务目录)或被kill掉,则咱们可使用"nohup supervise 服务目录 & "来从新启动该服务对应的supervise进程。

				查看服务的状态:svstat xxxx/xxxService
				
				常见问题:
					问题:若不当心将服务目录下的supervise目录删除后,会致使没法使用svc命令:
						svc -u /home/work/jxn-test/agent
						提示:svc: warning: unable to control /home/work/jxn-test/agent: file does not exist

						svstat /home/work/jxn-test/agent
						提示:/home/work/jxn-test/agent: unable to open supervise/ok: file does not exist

					解决:
						先kill掉该服务以前的supervise进程:ps aux | grep "supervise /home/work/jxn-test/agent" | grep -v grep | awk '{print $2}' | xargs kill -9
						而后直接使用nohup supervise /home/work/jxn-test/agent > svsrun.log 2>&1 & 启动,而后会自动生成supervise目录,咱们就可使用svc命令了。
相关文章
相关标签/搜索