記一次由於環境變量引起的crontab執行沒有日志輸出的問題


今天在scrapy的代碼中加入監測環境變量來動態配置setting的代碼,但代碼部署后發現以前正常的crontab 任務沒有任何日志輸出 了。手動命令行執行卻是可以執行的。查看/var/message/cron發現腳本是執行的,但無法確認是否執行成功。

於是把crontab的任務改了一下 把 

*/20 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh 改成了  */1 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh > cron.log

結果郁悶的是在目錄下沒發現cron.log

。。。。

一開始還以為是crontab的執行出問題了,各種crond重啟,網上搜,還是不行

后來終於發現原來是語句寫的有問題,*/1 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh > cron.log 這個會把文件輸出到執行用戶(root)的根目錄下,而我原本是想在/home/hjdang/下面的(粗心了,改成*/1 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh > /home/hjdang/cron.log)就有了。

但是腳本執行了,scrapy的日志啥的都沒有啊,而且為了調試,我把

nohup scrapy crawl smzdm_jingxuan  

改成了

nohup scrapy crawl smzdm_jingxuan & >> smzdm.log 10>&1 &

但smzdm.log總是空文件。

后來又發現這個語句也寫的有問題,真是郁悶。改成下面終於看到輸出了.

nohup scrapy crawl smzdm_jingxuan  >> smzdm.log 10>&1 

日志上報錯了

FileNotFoundError: [Errno 2] No such file or directory: '/Users/gaoxianghu/temp/scraping.log'

明顯是配置文件的路徑找不到,但我明明用環境變量區分了啊,一頓搜索,終於發現了原因。有網友說:因為在Linux下用crontab執行定時任務時不會從用戶profile文件中讀取環境變量參數,所以導致在手動執行某個腳本時是成功的,但是寫入crontab中定期執行時會出錯。根本原因是某些命令無法使用crontab調用,因為用戶登陸Linux操作系統的時候,”/etc/profile”, “~/.bash_profile”等配置文件會被自動執行,所以手動執行腳本能夠成功,但是crontab執行失敗。

大意了啊,環境變量需要直接配在腳本中才行啊,配在環境變量文件里讀不到啊,又一次雪的教訓!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM