2014-09-02 73 views
4

我已是兄弟姐妹一個Python驅動程序和庫腳本:蟒蛇的crontab和路徑

/home/mydir/pythonProjs/ 
  • driver.py

  • lib.py

driver.py我也行:

from lib import method1

以下是在Linux上從我的命令行成功:

python /home/mydir/pythonProjs/driver.py 

但是當我嘗試在crontab中執行以下操作:

10 1 * * * export PYTHONPATH=~/mydir/pythonProjs; python /home/mydir/pythonProjs/driver.py

我得到的錯誤:

ImportError: No module named lib.method1 

我也嘗試將我的crontab命令中的路徑設置更改爲完全限定路徑/home/mydir/pythonProjs,省略「導出」,並且還嘗試編寫.sh文件(必要的#!bin/bash ...)

我有一個主要問題和後續問題: main:什麼是解決我的問題的最佳實踐方法? 後續:cron具有不同於我的shell的路徑訪問權後面的哲學是什麼?

之前,我得到了投得太快,我會提到我已閱讀,但都沒有成功(或正確解析)以下內容: - Where can I set environment variables that crontab will use? - Crontab Issues running Python - http://pythonadventures.wordpress.com/2012/03/31/calling-a-python-script-from-crontab/

回答

7

嘗試打印環境從虛擬工作變量

* * * * * env > /tmp/env.output 

的建議在https://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work

同時檢查一下shell的crontab使用的是什麼。你可以通過你的crontab的頂部添加

SHELL=/bin/bash

希望這有助於設置外殼bash

+1

謝謝!除了你在我的crontab頂部建議的SHELL命令之外,還有必要在我的driver.py腳本的頂部添加這個shebang: '#!/ usr/bin/env python' 奇怪的是,如果我沒有在家中包含後者和$ journalctl,那麼我沒有看到從cron記錄的任何錯誤,但driver.py沒有完全執行(例如,它似乎不會導入lib.py)。 也感謝'env>'建議。 – Quetzalcoatl 2014-09-03 14:34:48

+1

如果我可以,你能否解決後續問題?例如,像我這樣的業餘愛好者怎麼會自己拿出'SHELL =/bin/bash'和'#!/ usr/bin/env python'解決方案?什麼可能是一些關於cron和/或Python的「標準」引用,可能導致我走上正確的道路? – Quetzalcoatl 2014-09-03 14:40:06

+0

嗨。關於你的後續問題。 「cron」不讀用戶環境變量的原因是安全性。 「cron」的標準參考是Unix手冊頁,例如http://www.unix.com/man-page/linux/5/crontab/最後,關於「最佳實踐」的問題是關於SO的話題,無論如何,我沒有很好的答案。 – user2314737 2014-09-04 06:22:55