天天看點

linux 下Crontab不執行

Crontab不執行

今天做巡檢的時候發現crontab不執行了,我是這麼寫的:

0  09,15  *  *  *  sh /beaprj/dailyreport/dailyreport.sh >/beaprj/dailyreport/`hostname`.log

08  11,16  *  *  *  sh /beaprj/dailyreport/log/backupchecklog.sh

但是上面的他條指令執行,隻有下面這條指令不執行。

解決辦法:

在網上查了查說可能是路徑的問題,然後我把backupchecklog.sh腳本裡面的路徑全部改成了絕對路徑,mail指令檢視報錯為:cp: cannot stat `/beaprj/dailyreport/log/-.log': No such file or directory,應該還是路徑的問題把前面的路徑去掉報錯為:

cp: invalid option -- .

Try `cp --help' for more information.

-

看來他是把那個變量認成是“-”了,奇怪,繼續研究吧

我原來的腳本是這樣的:

WORKPATH=/beaprj/dailyreport/log/

BACKPATH=/beaprj/dailyreport/log/log/

DATE=`date +%Y-%m-%d`

#echo $DATE

cd $WORKPATH

ls -l *.log|awk '{print $7"-"$8}'|awk -F: '{if($1 <= 12) {print"AM-" $2} else {print "PM-" $2}}'>${WORKPATH}list

for i in `cat ${WORKPATH}list`

   do

     FILENAME=`echo $i|awk -F- '{print $3"-"$4}'|awk -F. '{print $1}'`

     APM=`echo $i|awk -F- '{print $1}'`

     cp ${WORKPATH}${FILENAME}".log"  ${BACKPATH}${FILENAME}"_"${DATE}"_"${APM}.log

done

#echo END========

經過反複測試發現ls -l *.log|awk '{print $7"-"$8}'|awk -F: '{if($1 <= 12) {print"AM-" $2} else {print "PM-" $2}}'>${WORKPATH}list在這裡倒進來的list檔案裡面的東西不符合,和預期的不一樣,繼續研究吧

後來單獨執行了一個腳本為(這裡把路徑改成了絕對路徑):

ls -l /beaprj/dailyreport/log/*.log | awk -F"/" '{print $1"-"$5}'>/beaprj/dailyreport/log/list

執行結果list裡面為-rwxrwxrwx 1 root root 1314 11-18 08:57 -EMIS-APP1.log

但是這個腳本在crontab裡面執行結果為:

-rwxrwxrwx 1 root root 1314 Nov 18 08:57 -EMIS-APP1.log

仔細看紅色部分,這樣執行完的後如果加上awk '{print $7"-"$8}那樣顯示的結果就不一樣了,我也沒弄明白為什麼crontab與外面不一樣,請高手指點,但是把上面的awk改成awk '{print $8"-"$9},crontab就會正常運作了,但是正常情況下就會有報錯。

到此問題解決

問題總結:這裡應該不是絕對路徑的問題,問題出在用ll看檔案屬性的時候外界顯示11-18但是crontab裡面執行就會顯示Nov 18 就這麼簡單

繼續閱讀