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重啟一下,靜靜的等待奇跡的出現。。。
如果還有問題,看日志,一步步排查,還有一個很值得注意的就是要確保你的腳本命令盡量使用全路徑,有些環境變量沒配的話是執行不起來的。
---------------------
作者:panyox
來源:CSDN
原文:https://blog.csdn.net/panyox/article/details/79157046?utm_source=copy