首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

定时重启进程的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 -lgrep $APP_MAINCLASS获取java进程的状态,如果改命令返回字串长度大于0,则使用awk''将进程号赋值给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进程的任务就完成了。在完成整个任务的过程中,参考了网络上的一些文章资料,也请教了有经验的同事,在学习编码过程中交流是很重要的,希望未来大家一起加油共同进步!

填问卷,看大牛都在学什么测试新技术!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180125G0MCEK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券