Linux:自定义系统服务实现

Linux:自定义系统服务实现

还是原来的UDP实现Client/Server文件传输插件,现代码已经全部实现.部署到客户机器上,已经满足客户需求.

由于用Java实现,老大开始要我打成两个exe部署,我就直接打成了两个jar包,在指定机器上,用脚本内部简单写java – jar Client.jar/Server.jar启动服务,停止服务则只能通过netstat,ps等查询到pid,然后kill掉.此过程让人不大喜欢啊,于是想起了另外两个常用的服务:mysqld tomcat,这两个家伙操作起来很爽.直接service mysqld/tomcat [start|stop|status|restart].我的想法就来了,直接看Tomcat/bin/下的sh文件.于是自己动手写了些脚本,实现了类似的功能.下面是实现步骤:

目标:

1.程序跟随操作系统启动,至少在系统级别3[多用户有网络]启动.

2.可以用service gaps [start|stop|status|restart] 操作自定义服务

实现步骤:

1.进入到/etc/init.d/可以看到有个tomcat,也就是说我们要自定义服务的话,需要在此目录下创建个以服务名命名的文件,我这里以gaps(gap:网闸,s:Server)写个网闸服务端的服务.

2.创建文件并且给其权限

3.编写gaps相关代码,这里我将上午写的脚本贴出,同时将其copy至gaps文件中

说明:   以下3句都不能缺少,否则执行chkconfig –add 命令时会出错

第一行:#!/bin/bash
说明使用的语言

第二行:#chkconfig:234 33 44  234:在级别2,3,4都需要启动 33:开机时顺序  44:关机时顺序

第三行:#description:this is gap server   对服务的描述

其实大家也发现下面的脚本比较简单,思路是:

a).在start中,创建个gaps.lock文件标明服务已经启动,调用startServer.sh启动Server.jar,脚本startServer.sh内容是:[$JAVA_HOME/bin/java -jar Server.jar]

b).在stop中,删除gaps.lock文件标明服务已经停止,[ps -ef | grep ‘Server.jar’ | grep -v grep| awk ‘{print $2}’|xargs kill -9 &] 用作根据Server.jar查找具体的PID并将其kill掉,其实这里和我最开始说的kill是一样的.只是封装了下而已.哈哈

c).在status中,既然start/stop都会操作文件gaps.lock,那么这么这里就判断文件是否存在就好了,当然这里可能会出现问题,比如我直接手动执行startServet.sh,那么就跳过了创建lock文件的操作,这时候执行service gaps status,还是显示未执行的.这点小问题咱们就略过去了好了,最开始的老大是只要我将Server.jar 开机启动就好了.我给他写成了个服务,已经不错了. 大家有更好的想法可以自己根据需求修改噢.表示接触Shell比较少,如有错误,还望指出.

#!/bin/bash
#chkconfig:234 33 44
#description:this is gap server 
start(){
	echo 'prepare start gap server ...'
	touch /var/lock/subsys/gaps.lock
	cd /usr/local/gaps/bin/
	./startServer.sh &
	echo 'sart gap server success !'
}
stop(){
	echo 'prepare stop gap server ...'
	rm -f /var/lock/subsys/gaps.lock
	ps -ef | grep 'Server.jar' | grep -v grep| awk '{print $2}'|xargs kill -9 &
	echo 'stop gap server success !'
}
status(){
	if [ -f /var/lock/subsys/gaps.lock ];then
		echo 'gap server is runing ...'
	else
		echo 'gap server is stopped ...'
	fi
}

case "$1" in
start)
	start
	;;
stop)
	stop
	;;
status)
	status
	;;
restart|reload)
	stop
	start
	;;
*)
exit 1
esac
exit 0

3.将服务添加至系统服务中,查看服务状态

4.测试服务能用否?

结语:到这里,已经完成了自定义服务gaps的实现.并且可以根据操作系统级别2,3,4启动.代码不怎么难,刚接触shell,表示这是自己写的第一个像样的脚本.哈哈,大牛们别见笑了… 

这里是喜欢技术,喜欢学习,喜欢交友的 Bill  ….  


版权声明:本文为博主原创文章,未经博主允许不得转载。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注