cron ジョブとして実行し、/var/log/messages/ の毎日のバックアップを作成するバックアップ スクリプトがあります。このスクリプトは実際のアプリケーションというよりは学習用であることにご注意ください。tar コマンドの実行後に終了コードを確認するために、if / else ステートメントを追加しました。スクリプトは以前は正常に動作していましたが、この機能を追加した後はハングします。以下のコード:
#!/bin/bash
admin="[email protected]"
of=messages-backup-$(date +%Y%m%d).tgz
cd /var/log/
tar -czvf $of messages
if [ $? -eq 0 ]; then
mail -s "Backup of /var/log/messages was successful!" $admin
exit 0
else
mail -s "Backup of /var/log/messages has failed!" $admin
exit 1
fi
cp $of /home/user/
rm -rf $of
出力:
[root@nidesant2 Scripts]# ./backup.sh
messages
^C
(Interrupt -- one more to kill letter)
答え1
変化
mail -s "Backup of /var/log/messages was successful!" $admin
に
echo hello | mail -s "Backup of /var/log/messages was successful!" $admin
または
mail -s "Backup of /var/log/messages was successful!" $admin < /dev/null
最初のオプションでは、メッセージ本文に任意のテキストを使用できます。 2 番目のオプションでは、空のメッセージ本文を含む電子メールが送信されます。 バックアップが失敗した場合は、2 番目の電子メール コマンドに対して同じ変更を繰り返します。
学習の目的で、tar ファイルの作成、コピー、削除が正常に完了したかどうかを確認してから、成功したかどうかを判断する必要があります。そのためには、次の操作を実行します。
変化
tar -czvf $of messages
に
tar -czvf $of messages && cp $of /home/user/ && rm -rf $of
また、この変更により、スクリプトの最後からcp $of /home/user/
と が削除されます。rm -rf $of
次に、文字列内の 3 つのコマンドすべてが正常に完了するか、または 3 つのコマンドのいずれかが失敗したかに基づいて、if/else が実行されます。