記錄一個crontab的中使用python腳本的坑

問題表現: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
相關文章
相關標籤/搜索