2010-12-03 61 views
2

我有一個Perl腳本(同步美味WP)其中:Perl腳本工作,但不是通過cron

  1. 通過外殼運行,但
  2. 不通過cron運行(和我沒有得到一個錯誤)

我能想到的唯一的事情就是它錯誤地讀取配置文件,但是......它是通過完整路徑定義的(我認爲)。

我讀我的配置文件:

my $config = Config::Simple->import_from('/home/12345/data/scripts/delicious/wpds.ini', 
    \my %config); 

(我託管在MEDIATEMPLE)

是否有人有線索?

更新1:下面是完整的代碼:http://plugins.svn.wordpress.org/wordpress-23-compatible-wordpress-delicious-daily-synchronization-script/trunk/(但我已經添加了路徑如上述配置文件位置作爲差分)

更新2:crossposted上https://forums.mediatemple.net/viewtopic.php?pid=31563#p31563

更新3:完整路徑做了竅門,解決了

+1

是否相同的UID下從cron運行從殼呢?可能是cron下缺少PATH或其他環境變量。插入一些調試打印到您的腳本以查明問題。 – jira 2010-12-03 00:12:35

+0

你的cron命令是什麼? – 2010-12-03 00:15:17

+0

即時添加一些調試 – edelwater 2010-12-03 00:17:41

回答

6

cron作業和從shell運行的作業之間的區別是'environment'。主要區別在於您的配置文件等不能用於cron作業,因此您在常規shell環境中設置的任何環境變量在cron環境中都不會設置爲相同 - 沒有PATH擴展,也沒有標識在哪裏的環境變量美味和/或WP託管等

建議:創建一個cron作業,簡單的環境報告,以已知的文件:

env > /home/27632/tmp/env.27632 

然後看看有什麼是你自己的shell環境中比較集中。機會是,這將揭示麻煩。

如果失敗了,其他的環境差異是一個cron作業沒有終端,並且輸入和輸出具有/ dev/null - 所以交互式的東西不能很好地工作。

1

根據你的crontab,根據你的安裝,問題可能是「perl」。與其他人一樣注意到環境,特別是變量$PATH對於cron而言是不同的。 perl可能不在路徑中,因此您需要將完整路徑置於perl中的cron命令中。

可確定與命令的路徑$ type perl

4

看來問題是不是在運行的Perl,但定位配置庫

你應該嘗試:

perl -e "print @INC"

並運行cron中類似的perl腳本,並讀取輸出

它們可能不同

0

我遇到了同樣的問題...

Perl腳本工作,但不是通過cron =>錯誤: 「perl的:命令未找到」

...更新後可從Plesk 12.0〜12.5的Plesk 。但現有的答案對我來說並不是很有幫助。

它花了一些時間,但比我發現這個線程在奧丁論壇這有助於我:https://talk.plesk.com/threads/scheduled-tasks-always-fail.331821/

他們建議如下:

/usr/local/psa/bin/server_pref -u -crontab-secure-shell "" 

即刪除在/ var /線軸/ cron的/ crontabs文件行:

SHELL="/opt/psa/bin/chrootsh" 

之後,我的cron作業運行沒有任何錯誤。

(Ubuntu的14.04使用Plesk 12.5)

-1
If the perl script runs fine manually, but not from crontab, then 
there is some environment path needed by the some package that is not 
getting through `cron`. Run your command as follows: 
suppose your cron entry like: 

* 13 * * * /usr/bin/perl /home/username/public_html/cron.pl >/dev/null 2>&1 

env - /home/username/public_html/cron.pl 

The output will show you the missing package. export that package path in 
$PATH variables 
相關問題