2011-09-26 107 views
2

現在我有一個使用numpy的腳本,我想在服務器上自動運行。當我ssh和手動運行它,它工作正常。但是,當我將它設置爲cron作業時,它找不到numpy。顯然由於共享的服務器環境,無論出於何種原因,cron惡魔都無法找到numpy。我聯繫了服務器主機的技術支持人員,他們告訴我要設置一個vps或者讓我自己的該死的服務器。有什麼辦法可以解決這個問題嗎?也許,通過將某些numpy文件移動到腳本所在的目錄中?解決方法安裝Numpy?

+0

有託管那些以Python支持爲榮的供應商,也許你應該考慮轉換。 –

+0

這不是我的電話,而且服務器最初並不打算用於我的目的。 – Strill

+0

你有我的同情心。 –

回答

2

如果你在服務器的某個地方安裝了numpy,你可以將它添加到python的導入路徑中;在腳本的開始,做這樣的事情:

import sys 
sys.path.append("/path/to/numpy") 
import numpy 
+0

其他答案都非常有用,但由於我無法直接更改crontab文件,所以我不得不使用這個。非常感謝你。 – Strill

2

的的cronjob一個空的環境中運行。因此,它不是使用與你在shell中相同的python二進制文件,或者你有PYTHONPATH設置,它不會在crontab下。

您應該運行env -i HOME=$HOME sh以獲得cronjob環境的簡潔。設置環境變量直到你的命令工作,並記錄它們。

然後,您可以設置這些在crontab文件中,再次使用env命令,如:

* * * * * env PYTHONPATH=/my/pythonpath OTHERVAR=correct-value /path/to/mycommand 
+0

注意,在crontab文件中設置環境變量的能力取決於'cron'的實現。例如,它不適用於Solaris 10。 – donkopotamus

+0

env -i命令確保所有內容都是如此,但是由於服務器主機只允許我通過其在線GUI間接訪問crontab文件,所以我無法添加任何新行。非常感謝,它確實有幫助。 – Strill

+0

您可以使用env命令將命令添加到命令環境中(這是它的主要目的),例如:'env FOO = bar mycommand')。這應該給你完全的控制權,即使有gui限制。 – bukzor

1

你的cron作業可能是與不同​​的Python解釋器執行。

以您(通過ssh)登錄,並說which python。這會告訴你你的python在哪裏。然後讓你的cron作業執行該python解釋器來運行你的腳本,或chmod +x你的腳本,並把路徑放在腳本頂部的#!行。

+0

@bukzor你是對的,我想到的是系統的crontab而不是用戶的crontab。固定 – Seth

1

由cron守護程序調用的進程具有最小的環境,通常由$HOME,$LOGNAME$SHELL組成。

這聽起來像numpy也許是$PYTHONPATH的某個地方?如果是這樣,你需要在crontab行中指定。如

/usr/bin/env PYTHONPATH=... <then the command to run> 

如果你是一個Linux系統上使用vixie cron在,那麼你也可以通過使用行指定在crontab全局變量如

# my environment settings 
PYTHONPATH = <path> 
SOMETHING_ELSE = blah 

<then my normal cron line> 

man -s 5 crontab