本人最近要用crontab做一个定时调度任务,调一个启动脚本去执行jar包,并给main方法传一个日期参数。
Linux系统:CentOS7
输入:
crontab -e
在里面编写:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin #分 时 天 月 星期 脚本路径
05 15 * * * /bin/sh /data/IPPParser/startup_cyc.sh
意思就是每天下午15:05 去执行startup_cyc.sh这个脚本。
脚本的内容:
#使JAVA_HOME生效
source /root/.bash_profile
#进入项目根路径
cd /data/IPPParser
#!/bin/sh if [ -z "$JAVA_HOME" ]; then
echo "Please configure the JAVA_HOME!"
exit
fi JAVA_OPTION="-Dfile.encoding=UTF-8 -Xmx256M -Xms256M"
#jar包名称
JAR_NAME=ippparser.jar
#传的参数
PARSE_DATE=`date -d "yesterday" +%Y%m%d`
#调用jar包命令
java $JAVA_OPTION -jar $JAR_NAME $PARSE_DATE
问题汇总:
一.crontab不生效,需要检查的地方
1.检查cron状态
service crond status
可以看到crontab是active状态
如果不是这个状态,说明crontab没有启动。
重启:systemctl restart crond
2.检查cron是否有调用shell命令
可以看到cron在15:05有调用脚本。
3.cron调用了命令,但是没生效(如:手动调脚本可以执行,但是cron调用不行)
看cron邮件: cat /var/spool/mail/root
说明我们的程序已经成功调用。如果有错误会打印出来。
4.找不到无法加载主类
一般是相对路径问题,打印一下路径,检查是否正确。
5.crontab调用时,自己是检测不到jJAVA_HOME的,需要在脚本里加上 source /root/.bash_profile,这样才能找到你的JAVA_HOME。