2017-04-18 56 views
0

我是Unix系統的新手。我想在crontab中安排一個python作業,如下所示;Crontab作業時間表

42 15 18 4 * absolute_path_where_python_is_install absolute_path_to_python_script > absolute_path_to_output_log_file 

這無助:沒有錯誤,沒有輸出 然而,當我手動運行下面的代碼,它按預期工作

absolute_path_where_python_is_install absolute_path_to_python_script > absolute_path_to_output_log_file 

有人可以幫我找出我缺少的是什麼?

在此先感謝。

+0

檢查你的環境,看看有沒有設置你使用的東西。例如,如果您在您的env中設置了PYTHONPATH,那麼在crontab運行時將不可用。 – gbtimmon

+0

同時檢查你的crontab。 '* * * * * date >>/tmp/ping'是確保crontab按預期運行的好方法。 – gbtimmon

+0

通過'sudo service cron status'和'grep CRON/var/log/syslog'來查看你的cron是否正在運行查看來自syslog的日誌 –

回答

0

一些事情要檢查調試:

1.)確保crontab正在運行。添加

* * * * * date >> /tmp/ping 

並檢查該文件以確保守護程序按預期工作。

2.)檢查運行腳本中的錯誤。現在你只捕獲stdout。捕獲標準錯誤,看看你能趕上一個錯誤消息

* * * * * python script.py > script.log 2>&1 

添加2>&1是文件描述符2(標準錯誤)重定向到文件描述符1(標準輸出),它被髮送到日誌文件,這意味着重定向都stdout和stderr將在日誌文件中結束。

3)確認該ENV如預期在運行時:

* * * * * env | sort > /tmp/env_in_cron 

,然後運行

env | sort > /tmp/env_at_runtime 

sdiff /tmp/env_at_runtme /tmp/env_in_cron 

,看看是否有任何可能需要的不是他們(並注意不同的環境)。如果你缺少的東西,你既可以

一)添加單個參數

* * * * * PYTHONPATH=/python/lib/path python python-script.py > python-script.log 

灣),或者單獨的源代碼完整包膜。

* * * * * . /home/user/.profile && python python-script.py > python-script.log 
+0

@http://stackoverflow.com/users/1158990/gbtimmon非常感謝選項b現在完美地工作。 –

+0

我用PYTHONPATH創建了一個.profile,並在crontab中做了類似的事情; * * * * * /path/to/.profile python-script.py >> python-script.log 2>&1 –

-1

假設你設置可以通過crontab cron的,

如果你不需要任何特殊的Python包從你的virtualenv

* * * * * python /path/to/file.py

運行它

* * * * * /path/to/env/bin/python /path/to/file.py

如果您需要幫助來設置cron間隔,請嘗試https://crontab.guru