
私は作業中で、ユーザーが呼び出したいRedhat
プログラムがフォルダー内にいくつかあります。そのフォルダーにバイナリを配置すれば、シェルのようにプログラムを直接呼び出すのに十分だと思いました。/usr/local/bin
crontab
root
基本的に毎回フォルダを指定する必要があるので、以下のcrontabは機能しません
5 9 * * 1,2,3,4,5 my_bin some_args
しかし私はそれを変更します
5 9 * * 1,2,3,4,5 source ~/.bashrc; /usr/local/bin/my_bin some_args
なぜなのかご存知ですか?
私がソースを取得した理由はbashrc
、特にLD_LIBRARY_PATH
バイナリが からいくつかの共有ライブラリを見つけられなかったため、いくつかの環境ライブラリを追加するためでした/usr/local/lib
。
答え1
cron ジョブは非常に最小限の環境で実行され、crond
シェルなしで直接実行されるため (シェルを強制的に作成しない限り)、通常のシェル設定は行われません。この問題を回避する標準的な方法が 2 つあります。まず、crontab で環境変数を定義します (これらはすべてのジョブに適用されますが、少なくとも定義の後にリストされているジョブには適用されます)。
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
LD_LIBRARY_PATH=/usr/local/lib
5 9 * * 1,2,3,4,5 my_bin some_args
次に、スクリプトを環境への依存度が低くなるように編集し (たとえば、スクリプト自体に何が必要になるかを定義する)、crontab エントリでフルパスを使用します。
5 9 * * 1,2,3,4,5 /usr/local/bin/my_bin some_args