Perlスクリプトはインタラクティブシェルではうまく実行されますが、cronジョブでは実行されません。

Perlスクリプトはインタラクティブシェルではうまく実行されますが、cronジョブでは実行されません。

私はインストールしましたデビッシュ一部のバックアップに使用されます。 Vault(ホスト)を初期化しました。次に、次のスクリプトを使用して実行します。

#!/bin/sh 
/sbin/dirvish-expire --quiet && /sbin/dirvish-runall --quiet
rc=$?
exit $rc

問題は、もはや回避策が見つからないことです。何らかの理由でdirvish-runall --quietcronジョブとして実行されると、2番目のコマンドは状態1で終了します。インタラクティブモードでは問題なくうまく機能します。

助けてもらえますか?

答え1

@TomHuntは彼の意見でこれを指摘し、彼の答えに対する功績を認める価値があります。私は、将来のクローン作業の問題がより簡単に解決できるように、彼のポイントを拡張したいと思いました。

私の提案は、現在の(機能的)環境とcronジョブスクリプト環境をキャプチャしてから、2つを比較して何が欠けているかを確認することです。 cronは起動時に開始され、プライベートシェル環境ファイル(〜/ .bashrc、〜/ .bash_profile、またはそこからロードされた他のファイル)を決して読み取らないことを忘れないでください。

  1. set | sort > /tmp/set.out
  2. set | sort > /tmp/cron-set.outクローンジョブのシェルスクリプトに一時的に追加する
  3. diff /tmp/cron-set.out /tmp/set.out
  4. 不足している環境変数を見つけて、cronジョブのシェルスクリプトに追加します(set上記の一時追加も削除)。

関連情報