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

发表于:2018-1-24 09:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:咖啡猫    来源:51Testing软件测试网原创

#
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
   
 ... ...
  查看更多精彩内容,请点击下载:

版权声明:本文出自《51测试天地》第四十八期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号