最後に、シェルスクリプトを使用してデータに現実的なバックアップスケジュールを設定しました。これは、cronによって狭い間隔で処理されます。残念ながら、CRONが実行されるたびに、問題が発生したときだけでなく、空のメールが届きます。
何か問題が発生した場合にのみCRONにメールを送信させることは可能ですか? TAR
が意図したとおりに実行されませんか?
当面の私のcrontabの設定方法は次のとおりです。
0 */2 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" [email protected]
どうもありがとう!
理想的には、すべてが期待どおりに進んだ場合にバックアップスクリプトが何も出力せず、何かがうまくいかない場合にのみ出力を生成することが望ましいでしょう。次に、MAILTO環境変数を使用して、スクリプトによって生成された出力を電子メールアドレスに送信します。
[email protected]
0 */2 * * * /bin/backup.sh
スクリプトが通常は出力を生成するがcronでそれを気にしない場合は、/ dev/nullに送信するだけで、stderrに何かが書き込まれたときにのみメールで通知されます。
[email protected]
0 */2 * * * /bin/backup.sh > /dev/null
cronic ラッパースクリプトを使用するのは良い考えのようです。これを使用するために、スクリプトを変更する必要はありません。
の代わりに:
0 1 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" [email protected]
行う:
[email protected]
0 1 * * * cronic /bin/backup.sh
簡単に言えば;すべてがスムーズに実行された場合(終了ステータス0)、サイレントで実行されますが、そうでない場合は詳細にレポートし、cronにメールレポートを処理させます。
https://habilis.net/cronic/ に関する詳細情報。
あなたは具体的にcron
に、たとえ/bin/backup.sh
(ちなみに、/usr/local/bin
)成功します。 | mail -s "Backup status" [email protected]
パーツとメールは、出力がある場合にのみ送信されます。おそらく、(cron
に応じて)crontabファイルの割り当てとして、メール送信先のメールアドレスを明示的に設定できます。
詳細については、
man 5 crontab
stderr
とstdout
の両方ではなく、stderr
を指示する必要があります。
1> /dev/null
ではなく2>&1
を使用してください。また、バックアップスクリプトでエラーを正しく報告する必要がある場合もあります。
ここに私が長年うまく利用してきた別のバリエーションがあります-出力をキャプチャして印刷しエラー時にのみ、メールをトリガーします。これは一時ファイルを必要とせず、すべての出力を保存します。重要な部分は2>&1
STDERRをSTDOUTにリダイレクトします。
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"
(アドレスは、crontabファイル全体に対して MAILTO = xxxx を設定することによっても変更できます)
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" [email protected]
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }
これは単純なコマンドで機能します。複雑なパイプ(find / -type f | grep -v bla | tar something-or-other
)の場合は、コマンドをスクリプトに移動し、前述のアプローチを使用してスクリプトを実行することをお勧めします。その理由は、パイプのいずれかの部分がSTDERRに出力した場合でも、電子メールを受信するためです。