本人最近要用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。