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 ….
版权声明:本文为博主原创文章,未经博主允许不得转载。