2009-05-05 34 views
3

工作正常,我運行下面的腳本上一個cronjob ...PHP錯誤,在提示

cd /etc/parselog/ 
php run_all.php >/dev/null 

,並正在以下錯誤:

[05-May-2009 20:30:12] PHP Warning: PHP Startup: Unable to load dynamic library './pdo.so' - ./pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0 
[05-May-2009 20:30:12] PHP Warning: PHP Startup: Unable to load dynamic library './mysql.so' - ./mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0 
[05-May-2009 20:30:12] PHP Warning: PHP Startup: Unable to load dynamic library './mysql.so' - ./mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0 
[05-May-2009 20:30:12] PHP Warning: PHP Startup: Unable to load dynamic library './mysqli.so' - ./mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0 
[05-May-2009 20:30:12] PHP Warning: PHP Startup: Unable to load dynamic library './odbc.so' - ./odbc.so: cannot open shared object file: No such file or directory in Unknown on line 0 
[05-May-2009 20:30:12] PHP Warning: PHP Startup: Unable to load dynamic library './pdo.so' - ./pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0 
[05-May-2009 20:30:12] PHP Warning: PHP Startup: Unable to load dynamic library './pdo_mysql.so' - ./pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0 
[05-May-2009 20:30:12] PHP Warning: PHP Startup: Unable to load dynamic library './pdo_odbc.so' - ./pdo_odbc.so: cannot open shared object file: No such file or directory in Unknown on line 0 
[05-May-2009 20:30:12] PHP Warning: PHP Startup: Unable to load dynamic library './pdo_sqlite.so' - ./pdo_sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0 
[05-May-2009 20:30:12] PHP Fatal error: Call to undefined function mysql_connect() in /etc/parselog/stats_downloads.php on line 5 

然而,當我從命令行運行相同的腳本,登錄完美無誤地工作。

這是在提示我的$ PATH字符串:

$PATH = /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 

任何意見或建議?我確定在運行cronjob時,它沒有lib路徑或其他東西。我甚至嘗試添加的確切路徑

回答

5

提示1:確保你在cron作業具有完全相同的$ PATH:

cd /etc/parselog/ 
export PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
php run_all.php >/dev/null 

提示2:確保所有其他環境變量匹配也是如此。使用命令env轉儲環境,並將相應的導出添加到您的cron作業。

+0

嗯,我得到了導出路徑,我想我在導出前有一個$ PATH。 我的env是: HOSTNAME = ***** TERM = xterm的 SHELL = /斌/慶典 HISTSIZE = 1000 SSH_CLIENT = 70.48.253.46 61056 22 OLDPWD = /等 SSH_TTY =的/ dev/PTS/0 USER = root MAIL =/var/spool/mail/root PATH =/usr/kerberos/sbin:/ usr/kerberos/bin:/ usr/local/sbin:/ usr/local/bin:/ sbin :/ bin:/ usr/sbin:/ usr/bin:/ usr/X11R6/bin:/ root/bin INPUTRC =/etc/inputrc PWD =/etc/cron.hourly SHLVL = 1 HOME =/root LOGNAME = root LESSOPEN = |/usr/bin/less pipe.sh%s G_BROKEN_FILENAMES = 1 _ =/bin/env – MichaelICE 2009-05-05 20:46:11

3

通常,當cron期間某些內容失敗,但在命令行上運行時,它是權限,工作目錄或環境變量。

它看起來像php可執行文件本身不加載庫,問題可能不會在您的腳本。

1

當您在cron作業中運行腳本時,它將在設置了很少環境變量的有限shell中運行。從你的錯誤看來,它可能是LD_LIBRARY_PATH,它需要設置爲與一堆共享庫相關的錯誤,但這只是一個猜測。它看起來像正確的PHP庫路徑沒有在cron腳本中正確設置。

通過將env命令添加到腳本並捕獲輸出,您可以捕獲運行cron腳本時使用的環境。將其與提示處的輸出env進行比較,然後查找變體。它們很可能來自您的本地系統或系統配置文件bashrc(或者甚至可能是。登錄)設置庫路徑的文件。我特別尋找與PHP相關的路徑和變量,因爲這似乎是你的問題。

我不得不幾次處理這個問題上我的最後一個項目,基本的解決辦法是:

  1. 確定執行腳本
  2. 創建一個簡短的腳本,設置所需的最低環境所需的環境
  3. 在啓動應用程序的腳本中的項目2中添加對腳本的調用,以便正確設置環境。
  4. 徹底測試以確保您不會錯過任何事情:-)。
0

當從用戶crontab運行cron作業時,它將以該用戶的身份執行。但是,它不會像用戶的.profile一樣在用戶主目錄中找到任何文件。cshrc或.bashrc或其他文件。如果您需要cron來源(讀取)您的腳本將需要的任何文件,您應該從cron正在調用的腳本執行它。設置路徑,採購文件,設置環境變量等。