1. 程式人生 > >ubuntu開啟crontab日誌及不執行常見原因

ubuntu開啟crontab日誌及不執行常見原因

crontab不執行常見原因

1,先排查你要執行的指令碼是否正常執行,驗證方法就是在控制檯輸入你要執行的指令碼命令,看是否能執行,但是即使有時能正常執行,也不一定說指令碼就沒問題。今天我就遇到了一個很奇怪的現象,我的指令碼命令沒使用全路徑,在控制檯是可以正常執行,但是crontab就是沒執行起來,日誌也沒報錯。然後把命令換成全路徑之後,cron就成功執行了。所以說,為了能正常執行,指令碼命令我建議寫上全路徑。

比如我要執行一個爬蟲,指令碼一般這樣寫

#!/bin/bash

cd /var/xxx/project #你的爬蟲目錄

scrapy crawl myspider #執行scrapy
這樣寫,然後在控制檯直接執行是沒問題的
sh /xxx/xxx/xx.sh
但是換成cron來就不行了,我們把scrapy的路徑給補上,輸入命令
find / -name scrapy
快速找到你的scrapy在哪裡,把xx/bin/scrapy那個路徑複製過來,我的是/usr/local/bin/scrapy,然後把剛才的指令碼改成
/usr/local/bin/scrapy crawl myspider
如果還不成功,那就開始下一步去crontab上找問題了。

2,首先我們把cron日誌開啟,Ubuntu系統預設是不開啟cron日誌的,不信你cd 到/var/log目錄下是找不到cron.log檔案的。

如何開啟,很簡單,控制檯輸入

vi /etc/rsyslog.d/50-default.conf
開啟檔案,在檔案中找到cron.*,把前面的#去掉,儲存退出,輸入
sudo service rsyslog restart
重啟系統日誌,然後稍微等下應該就能在/var/log目錄下看到cron.log,vi cron.log就可以檢視cron執行日誌了。

如果在日誌中能看到有這樣的記錄

Jan 23 12:55:01 iZbp12o440hd7llqz14ebpZ CRON[3990]: (root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
這是一個很常見的錯誤,很多新手都會碰到這個問題,這個錯誤原因是cron執行完你的命令後就會給你發一封郵件,但是我郵件都沒配置往哪發啊,所以就報錯了。難道真的要我把郵箱配置起來嘛,當然不要,也不知道怎麼配,更不想去配,你執行完就完事了唄,給我發郵件幹啥呢。可能老外比較喜歡用郵件,想每天登入郵箱都能看到滿滿的一箱信,哈哈,扯遠了。

迴歸正題,我們只需要在每條cron命令空一格後加上這幾個字

>/dev/null 2>&1
比如我的一條命令
*/5 * * * * sh /var/xxx/xxx.sh >/dev/null  2>&1
明確告訴你,完事別給我發什麼郵件了,老子不需要。然後
service cron restart
把cron重啟一下,靜靜的等待奇蹟的出現。。。

如果還有問題,看日誌,一步步排查,還有一個很值得注意的就是要確保你的指令碼命令儘量使用全路徑,有些環境變數沒配的話是執行不起來的。