2016-09-16 173 views
1

我試圖執行perl腳本,它可以從crontab中使用perforce。這是我的Perl代碼:無法從crontab運行perforce

print `/usr/local/bin/p4 filelog /projects/config.json`; 

我得到錯誤:

Perforce client error: 
    Connect to server failed; check $P4PORT. 
    TCP connect to perforce:1666 failed. 
    Name or service not known 

同樣的命令順暢地從CLI工作。任何想法我可以用它做什麼?

回答

4

這是因爲您沒有P4CONFIG(或可選)環境變量在您的cron環境中設置。您只需複製交互式shell中的環境變量(可能使用set | grep ^P4來確定它們是什麼)。

查找有關設置env變量的詳細信息here

+0

我加P4PORT的命令,但仍然得到同樣的錯誤。這是我的cron行:'46 4 * * * P4PORT = ss-5:1666 PERL5LIB =/lib/tmp/test >>/tmp/cronoutput 2>&1' – PolinaC

+0

我認爲這是不言而喻的,複製你在交互式環境中使用的P4 env vars('set | grep^P4')。不應該有任何猜測! – ikegami

-1

我找到了解決辦法是設置ENV瓦爾在Perl代碼:

$ENV{'P4PORT'} = '...'; 
    $ENV{'P4CLIENT'} = '...'; 
    $ENV{'P4USER'} = '...'; 
    $ENV{'P4PASSWD'} = '...'; 
+0

設置這些環境變量是現有答案指示您要執行的操作。然而。它建議將它們設置在crontab文件中,這比在腳本中硬編碼配置數據要好得多。這是一個不好的解決方案。 – ikegami

+0

@ikegami,現有的解決方案並沒有解釋如何在crontab文件中設置它們。如果你可以添加這些信息,這將有很大的幫助。謝謝。 – PolinaC

+0

如果您在閱讀文檔('man 5 crontab')後無法確定如何在crontab中設置變量,請隨時提出問題。你也可以讓shell設置它們('VAR = val command')。 – ikegami