1、概述
在Linux中经常看到这种操作:执行某个脚本文件就能实现对某一服务的启动,在执行另外的脚本文件实现对其的关闭,最典型的莫过于Tomcat中的startup.sh和shutdown.sh,如果想自己实现一个脚本达到对某个程序进行启停的木该如何实现呢,今天就研究下这个问题。
2、操作流程
本文以一个可执行jar包(点击mytask.jar进行下载)作为待执行的程序,用另外两个脚本文件(start.sh和stop.sh)实现对它的启停。
mytask.jar的功能是持续不断地往console输出系统当前时间。
start.sh脚本的内容下:
#! /bin/bash
java -jar mytask.jar > logfile.log 2>&1 & echo $!|tee process.pid
其中:
stop.sh脚本内容如下:
#! /bin/bash
PID=$(cat ./process.pid)
kill -9 $PID
从process.pid文件中读取刚刚启动的程序的进程号,然后kill掉。
3、总结
首先说一下小小的事故,最初写start.sh这个脚本时,并没有加上echo $!|tee process.pid,导致运行该脚本后并没能得到PID,由于调度起来的程序是一个死循环,日志文件logfile.log很快就达到G量级了。后来通过echo $!命令查找当前shell里最后一个后台进程的PID,才将其杀掉。当然也可以通过top命令排查一下刚才的死循环对应的PID是多少,然后kill掉。
本文通过start.sh脚本实现了对可执行jar的运行,并通过stop.sh脚本将其停止,当然这两段脚本需要完善 的地方还有很多,后续会添加更多功能。