問題表現:java
每次手動執行這個python腳本運行,程序工做的很好,可是若是是經過crontab的方式來運行,就會有各類問題!python
處理:bash
*/15 * * * * sh /root/app/crypt/start.sh >> /root/app/crypt/res.log 2>&1app
發現了原來腳本中使用的路徑用了相對的路徑,修改成絕對路徑後就正常跑crontab了。須要添加2>&1才能看到這段錯誤信息。spa
command >> file 2>&1 是什麼?debug
這也是今天在嘗試讓crontab打印出錯誤信息才學到的東西。blog
先說說下面的命令的意思:繼承
command >> file 2>>filecrontab
這是說:正常的輸出信息會添加到file之中,錯誤信息也會添加到file之中,可是是兩個文件管道FD1跟FD2同時在搶,而且可能產生互相覆蓋的現象配置
command >> file 2>&1
就不太同樣了:首先正常的輸出(到屏幕)信息會經過管道FD1會添加到file之中,錯誤信息會繼承FD1也添加到file 之中。
當crontab命令加上這個後綴(2>&1) 以後,個人debug.log 之中終於出現以下圖所示的錯誤信息(sh: l: java not found),也終於找到了解決問題的方向。
其餘問題的解決方案:
解決方案 – 1 :加強型crontab
在crontab的命令裏面增長source /path/to/configfile. 好比咱們的java是配置到/etc/profile之中,那麼個人crontab命令就是:
* * * * source /etc/profile; cd XXXX && pythontask.py >> ~/debug.log 2>&1
可是發現這種方式在個人環境並沒起做用
解決方案 – 2 : bash腳本出馬
這種方式須要在增長一個bash腳原本調用python命令。參考下面:
#!/bin/bash source /etc/profile pythontask.py