定时重启进程的Shell脚本实例

定时重启进程的Shell脚本实例


定时重启进程的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进程号。

   

定时重启进程的Shell脚本实例

  第二段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代表第一个域。

   

定时重启进程的Shell脚本实例

  第三段的start()函数,用于启动java进程。当检测psid不为0时,给出提示。检测psid为0时,进入JAVA_HOME路径,使用 java -cp命令启动进程,启动完成后,再调用checkpid检测一下是否启动成功。

定时重启进程的Shell脚本实例

  第四段的stop()函数用于停止java进程。首先使用checkpid检测java进程的进程号,如果进程号不为0,则使用kill -9 杀死它。然后使用根据$?($?判断上条命令是否执行成功,执行成功为0)判断一下是否杀死成功并给出提示。再用checkpid检测进程号,如果不为0继续调用stop,直到杀死该进程为止。

定时重启进程的Shell脚本实例

  第五段的status()函数,根据psid值获取进程的状态。

   

定时重启进程的Shell脚本实例

  最后一段使用case语句,将脚本的入参做了定义。共有start,stop,restart,status四个参数。

  比如定时重启可以在crontab中定义0 0 * * *  /scriptpath/test.sh  restart

   

定时重启进程的Shell脚本实例

  至此,一个定时重启JAVA进程的任务就完成了。在完成整个任务的过程中,参考了网络上的一些文章资料,也请教了有经验的同事,在学习编码过程中交流是很重要的,希望未来大家一起加油共同进步!

定时重启进程的Shell脚本实例

定时重启进程的Shell脚本实例

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