バックアップ スクリプトがハングしています

バックアップ スクリプトがハングしています

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 が実行されます。

関連情報