crontab定時排程shell指令碼
阿新 • • 發佈:2018-12-22
本人最近要用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。