cronのスクリプトでコマンドが見つかりません。

cronのスクリプトでコマンドが見つかりません。

データベースをダンプし、SQLファイルをSwiftにアップロードするスクリプトがあります。端末ではうまく動作しますが、cronでは失敗するスクリプトに問題があります。

/usr/local/bin/swiftデバッグ後、スクリプトがそのコマンドを見つけることができないことがわかりました。

これは私のcrontabエントリです。

*/2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup  

私が試したことは次のとおりです。

  1. swift次のフルパスを使用してください。/usr/local/bin/swift
  2. /etc/profilebashスクリプトを実行する前にスクリプトを実行してください。

この問題をどのように解決できますか?

ベストアンサー1

Cronはユーザーと同じ環境では実行されません。次のようにすると、何を意味するのかがわかります。

ターミナルプロンプトに入力envし、出力を書き留めます。

次に、このようなクローンジョブを設定し、その出力を前のジョブと比較します。

*/5 * * * * env > ~/output.txt 

ユーザーと同じ変数がcrontabないため、問題が発生する可能性が最も高いことがわかります。PATH解決策として、(postgresユーザーから)echo $PATH結果をcrontabの最初の行にコピーできます(このようなもの)。

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/jbutryn/.local/bin:/home/jbutryn/bin

または、より具体的に説明したい場合は、以下を追加するだけです。

PATH=$PATH:/usr/local/bin

しかし、私は通常これを行うべきではない理由を聞いていません。そうしないと、この問題が再び発生する可能性があるため、常にユーザーのPATHをcrontabに入れます。

おすすめ記事