还是吃了能力的亏,因为很少写shell脚本,导致一个很简单的问题困扰。
如果不会写的,百度下来的脚本,单独执行没有任何问题,但是一旦通过定时任务去执行的话,则会出现问题。没有什么特别难的逻辑,其中语法不懂,那需要自己去研究下。
#!/bin/bash #. /etc/profile一定要有,因为JAVA_HOME的变量配置在里面,如果不想写这串代码 #那需要自己去申明,此处就不做说明 . /etc/profile tomcatPath="/test/tomcat7-2020.9.7" binPath="$tomcatPath/bin" echo "[info][$(date +'%F %H:%M:%S')]执行Tomcat的重启以及启动:$tomcatPath" pid=`ps aux | grep tomcat7-2020.9.7 | grep -v grep | awk '{print $2}'` echo $pid=="tomcat dir" if [ -n "$pid" ] then { echo ========开始kill tomcat进程============== echo $pid kill -9 $pid echo ========kill tomcat进程结束============== sleep 2 echo ===========Tomcat重启============== $binPath"/startup.sh" } else echo ===========Tomcat未启动,自行启动============== $binPath"/startup.sh" fi因为公司的服务器为linux为centos 7,所有进行定时任务只需要crontab -e进行添加任务
#对应格式为 * * * * * command,简单说下,依次顺序下来为:分,时,天,月,星期,执行命令 */1 * * * * /test/test.sh写好之后wq保存退出,控制台会输出 crontab:installing new crontab,则表明添加成功,通过crontab -l能够查看自己添加的任务,且要三分钟后执行,所以要自行考虑对应时间设置
[root@wisesoft-9-130 bin]# crontab -e crontab: installing new crontab [root@wisesoft-9-130 bin]# crontab -l */1 * * * * /test/test.sh >> /test/test.txt至此已经完成定时任务的基本设置,只需要看查看/test/test.txt是否有执行代码输出。
通过上述的操作进行设置之后,如果直接执行/test/test.sh能够对Tomcat进行重启,但是通过定时任务则会失败,
原因就出现在下面这串代码pid=`ps aux | grep tomcat7-2020.9.7 | grep -v grep | awk '{print $2}'` 它会莫名多出来几个进程ID,百思不得其解,最后找到问题,由于脚本的名称为test.sh,多的那两个进程ID就是这个脚本导致的。。。改成如下就好了:pid=`ps aux | grep tomcat7-2020.9.7 | grep java | grep -v grep | awk '{print $2}'`
此时,完整的定时任务就成功了
