还是吃了能力的亏,因为很少写shell脚本,导致一个很简单的问题困扰。
1、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
2、定时任务
因为公司的服务器为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是否有执行代码输出。
3、修改
通过上述的操作进行设置之后,如果直接执行/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}'`
此时,完整的定时任务就成功了