2011-10-27 44 views
0

我正在運行一個bash腳本,它使用libboost在內存中保存一個統計模型。當我直接從命令行運行腳本(即:#/pylda/exec-test.sh)時,它可以正常工作。但是,當它在cron作業上運行時,出現以下錯誤:當通過cron運行時,Bash腳本失敗,找不到Libboost庫

"/root/pylda/src/infer: error while loading shared libraries: libboost_program_options.so.1.46.1: cannot open shared object file: No such file or directory" 

cron如何表現不同?是否有需要設置的環境變量?就我所知,這是cron的根源。

感謝

回答

2

檢查LD_LIBRARY_PATH環境變量?

0

嘗試設置上的Cron腳本

# /etc/cron.d/something 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
+0

原諒我的知識的缺乏在這一個 - 有這將是特定於CentOS的安裝路徑? – Russ

+0

@ michael-krelin-hacker提供的答案更加準確,您應該設置LD_LIBRARY_PATH,但仍然應該在Cron腳本中執行該操作。您應該使用'env'檢查當前的LD_LIBRARY_PATH。 – 0xd

1

作爲一般性評論的PATH VAR,不依賴於環境變量的存在,你的互動(登錄)時通常有會話時,您的cron( )一個腳本。有些實現只定義了一個最小的環境。你可以很好地在腳本中包含你需要的所有東西,或者通過直接聲明或者通過向你的腳本中找到需要的變量文件。

1

即使這是舊的,我認爲這個答案可能會幫助其他人。

這裏我的crontab的樣本行:

0 3 * * 1,2,4,5,6 (. /home/oracle/.profile; export ORACLE_SID=myDB;. myscript.ksh parm1 parm2;) 1>/dev/null 2>&1 

其中: 執行我的用戶(甲骨文)的形象,所以我相信我有良好的ENVS:。 /home/oracle/.profile 設置本地環境值:export ORACLE_SID = myDB 使用其params:執行腳本。 myscript.ksh parm1 parm2(nota:點,因爲腳本沒有x標誌) 不發送電子郵件:1>/dev/null 2> & 1(我的腳本通過格式發送所需的電子郵件)。

使用()括起命令列表,用分號(;)分隔命令。

希望這可以幫助...

相關問題