cron経由でスクリプトを実行すると「コマンドが見つかりません」


29

crontabでスクリプトを実行したいのですが、いくつか問題があります...

私のスクリプトでは、次のコマンドを実行します。

db2 connect to myDB2

これをdb2inst1ユーザーとして実行すると正常に機能しますが、このスクリプトをdb2inst1 crontabで実行すると、次のようになります。

db2:コマンドが見つかりません。

どうすれば解決できますか?

回答:


43

コマンドへの絶対パスを入力する必要を避けるために、シェルは$PATH環境変数を導入し、各ディレクトリはa :で区切られ、左から右に検索が行われます。cron多くの場合、この$PATH変数を含む環境全体をクリアします。したがって、スクリプトは、シェルでの動作と比較して、cronで異なる動作をする場合があります。

絶対パスを使用する

ユーザーwhich db2として実行しdb2inst1て、db2プログラムの完全なパスを取得します。出力がの場合、/usr/bin/db2cronコマンドは次のようになります。

/usr/bin/db2 connect to myDB2

PATH変数を設定します

ユーザーecho "$PATH"として実行しdb2inst1$PATH変数を取得し、この変数がcronスクリプトでも使用できることを確認します。たとえば、出力がの場合、/usr/local/bin:/usr/bin:/binシェルスクリプトの先頭に次の行を追加します。

export PATH="/usr/local/bin:/usr/bin:/bin"

8

https://askubuntu.com/a/23438/227839で回答さPATHれているように、シェルスクリプトで設定する必要があります。

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

または、すべてのcronジョブに適用されるcrontabファイルで:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2

ありがとう、助かりました!
山城りおん

3

db2myDB2が何であるかを定義する必要があります。そうでない場合は、実行する' file 'または ' application ' の絶対ロケーションを使用します。

例:

/bin/rm /home/ubuntu/a.txt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.