cronで実行したときにbashスクリプトが失敗し、Libboostライブラリが見つかりません

私はlibboostを使ってメモリ内の統計モデルを保持するbashスクリプトを実行しています。コマンドラインから直接スクリプトを実行すると(#/pylda/exec-test.sh)、正常に動作します。しかし、それがcronジョブで実行されると、私は次のエラーを受け取ります:

"/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です。

ありがとう

0

4 答え

LD_LIBRARY_PATH 環境変数を確認しますか?

2
追加された

一般的なコメントとして、対話型(ログイン)セッション中に通常はスクリプトを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

Which: Execute the profile of my user (oracle), so I am sure I have the good envs:. /home/oracle/.profile Set a local env value: export ORACLE_SID=myDB Executes the script with its params:. myscript.ksh parm1 parm2 (nota: the dot because the script does not have the x flag) Does not send email: 1>/dev/null 2>&1 (My script sends the needed emails with formatting).

コマンドのリストを囲むには()を使用し、コマンドを区切るにはセミコロン(;)を使用します。

これが助けることを望む...

1
追加された

CronスクリプトにPATH varを設定しようとする

# /etc/cron.d/something
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0
追加された
@ michael-krelin-hackerが提供する答えはより正確です。LD_LIBRARY_PATHを設定する必要がありますが、それでもCronスクリプトの中で行うべきです。現在のLD_LIBRARY_PATHを 'env'でチェックする必要があります。
追加された 著者 0xd,
この1つに関する私の知識の欠如を許してください - CentOSのインストールに特有のパスがありますか?
追加された 著者 Russ,