定时重启进程的Shell脚本实例
题记:
笔者是一枚软件测试从业者,最近在一次任务中,需要编写定时重启java进程的脚本。由于之前只会一些vim cd tailf mkdir cp scp rm ll之类的简单指令,所以这次决定借此机会入个门。特此把这段经历记录下来,给广大同行参考。
一、如何实现定时执行任务
Linux中通过crontab来运行定时任务。
1、安装crontab:yum install crontabs
2、查看crontab的状态:service crond status
3、启动crontab服务:service crond start
4、编辑配置文件 crontab -e
配置文件格式为:minute hour day month dayofweek command
例如每天十二点执行重启脚本就配置为:
0 0 * * * /scriptpath/test.sh param
其中scriptpath为脚本路径 test.sh为脚本名称 param为脚本参数,此例中有4个参数:start stop restart status , 分别代表开启、结束、重启、状态查询。
编辑完成后,记得:wq! 强制保存退出
5、在/scriptpath/路径下创建test.sh脚本
二、编写test.sh脚本
话不多说,直接贴代码:
第一段定义一些全局变量,running_user指运行脚本的用户,APP_HOME指JAVA程序存放的路径,APP_JAR指应用程序依赖的JAR包的位置,APP_MAINCLASS指JAVA程序的主类,JAVA_OPT配置的是JAVA虚拟机的内存配置参数,JAVA_HOME是jdk的安装路径,psid是JAVA进程号。
第二段checkpid()函数用于检测java进程的进程号。使用jps -l|grep $APP_MAINCLASS获取java进程的状态,如果改命令返回字串长度大于0,则使用awk"{print $1}"将进程号赋值给psid,否则psid为0。
awk命令的格式 awk [-F field-separator] "commands" input-files 它的工作流程是读取有\n换行符的一条记录,按指定的域分隔符划分域,$1代表第一个域。
第三段的start()函数,用于启动java进程。当检测psid不为0时,给出提示。检测psid为0时,进入JAVA_HOME路径,使用 java -cp命令启动进程,启动完成后,再调用checkpid检测一下是否启动成功。
第四段的stop()函数用于停止java进程。首先使用checkpid检测java进程的进程号,如果进程号不为0,则使用kill -9 杀死它。然后使用根据$?($?判断上条命令是否执行成功,执行成功为0)判断一下是否杀死成功并给出提示。再用checkpid检测进程号,如果不为0继续调用stop,直到杀死该进程为止。
第五段的status()函数,根据psid值获取进程的状态。
最后一段使用case语句,将脚本的入参做了定义。共有start,stop,restart,status四个参数。
比如定时重启可以在crontab中定义0 0 * * * /scriptpath/test.sh restart
至此,一个定时重启JAVA进程的任务就完成了。在完成整个任务的过程中,参考了网络上的一些文章资料,也请教了有经验的同事,在学习编码过程中交流是很重要的,希望未来大家一起加油共同进步!
填问卷,看大牛都在学什么测试新技术!
- 《战争机器》开发商新作疑被泄露《完美黑暗》重启
- 本世纪超大债务泡沫或将刺刀见红,中俄等11国或加速了这一进程
- 坐着氢弹去太空?NASA重启核聚变火箭研究!
- 侃爷重启IG后刷屏 ; Nike Air Force 1「Swoosh Pack」谍照曝光 |
- 央视聚焦春运40年:杭绍台高铁加速铁路市场化改革进程
- 打个喷嚏也会要命?小心你血管里这颗"不定时炸弹"!
- 美国政府短暂停摆六小时后重启 移民问题仍待解套
- 缅全国停火协议又添两签字方 和平进程再现新进展
- 网传一加X2要重启,一加老板刘作虎赶辟谣:没有的事,一加以后只
- 【健康】打个喷嚏也会要命?小心你血管里这颗\"不定时炸弹\"!