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