crontab定时任务Java程序不执行问题

时间:2021-12-15 07:50:37


crontab定时任务Java程序不执行问题

linux下,项目部署在/data/my/scriptTest/bin

./back.sh

其中脚本在项目下,可以正常执行

vi back.sh

#!/bin/sh

ulimit -n 65536

# cp运行备份jar
cp -f scriptTest.jar scriptTest_runtime.jar

# 执行程序,依赖jar放置在/data/my/scriptTest/lib下
# 程序入口 com.util.StartServer下

java -server -cp scriptTest_runtime.jar:log4jconf:../lib/commons-collections-3.2.1.jar:../lib/*.jar:../lib/mysql-connector-java-5.1.26-bin.jar com.util.StartServer test_server


crontab定时任务,每日调用back.sh脚本,但是程序没有执行

crontab -e 配置任务,每日凌晨3点执行

0 3 * * * /bin/sh /data/my/scriptTest/bin/back.sh > /data/my/scriptTest/log/back.log

分析问题,查阅资料,crontab是无法自动获取jdk变量,要在java命令之前写入jdk绝对路径,而且要切换到要执行的sh路径下,我这个问题这两个条件缺一不可。


查看当前linux下java的绝对路径
whereis java
java: /usr/local/jre1.8.0_111/bin/java


重新修改back.sh脚本,添加程序所在路径和jdk的绝对路径

vi back.sh

#!/bin/sh

# crontab任务添加程序所在路径
cd /data/my/scriptTest/bin

ulimit -n 65536

# cp运行备份jar
cp -f scriptTest.jar scriptTest_runtime.jar

# 执行程序,依赖jar放置在/data/my/scriptTest/lib下
# 程序入口 com.util.StartServer下

# crontab任务添加jdk的绝对路径
/usr/local/jre1.8.0_111/bin/java -server -cp scriptTest_runtime.jar:log4jconf:../lib/commons-collections-3.2.1.jar:../lib/*.jar:../lib/mysql-connector-java-5.1.26-bin.jar com.util.StartServer test_server


重新配置crontab任务时间,成功执行java程序,可以查看执行日志
cd /data/my/scriptTest/log/back.log