linux crontab 无法执行shell脚本解决方法

来源:互联网 发布:互联网金融 加班 知乎 编辑:程序博客网 时间:2024/05/01 09:05

crontab 创建了一定时任务,每分钟去执行一个shell脚本

*/1 * * * * sh /home/test/start.sh

==============================

start.sh :

#!/bin/bash
cd /home/test
sh kill.sh
java -jar test.jar

==============================

kill.sh :

#!/bin/bash
pid=`ps -ef | grep java | awk '{if($0 ~/test.jar/) print $2}'`
if [ "$pid" != "" ];then
    kill -9 $pid
    echo "test.jar killed: pid $pid"
else
    echo "No test.jar running."
fi

==============================

发现test.jar一直没被执行,但是直接执行shell脚本:sh start.sh 是可以让test.jar跑起来的。

一开始怀疑crontab没生效,但是用tail -f /var/log/cron 看了crontab的日志之后,发现crontab的确是在运行的


于是就把crontab的运行日志打印到 /home/test/log, 在crontab -e 中修改:

*/1 * * * * sh /home/test/start.sh 2>>/home/test/log

等到下一次crontab执行之后,打开日志查看。信息如下:

/home/test/start.sh: line 4: java: command not found

那么基本猜到是path的问题了

于是就把java相关的环境变量引进来,通过source命令引入环境变量:source /etc/profile

修改start.sh,增加一行。

start.sh :

#!/bin/bash
source /etc/profile
cd /home/test
sh kill.sh
java -jar test.jar

等下下一次crontab执行时,就正确了!






0 0
原创粉丝点击