rsyncを使用してスクリプトを改善する方法

rsyncを使用してスクリプトを改善する方法

rsyncファイルをバックアップして同期するための次のスクリプトがあります。

このスクリプトをよりコンパクトで迅速に作成し、エラー処理機能を向上させるにはどうすればよいですか?

#!/bin/sh
  
errors=""

sudo rsync -avh --delete --no-o --no-g /home/xralf/audio /media/extdevice/rsync_backups/
if [ "$?" -eq "0" ]
then
  echo "no errors in audio"
else
  errors="${errors}error in audio\n"
fi

sudo rsync -avh --delete --no-o --no-g /home/xralf/books /media/extdevice/rsync_backups/
if [ "$?" -eq "0" ]
then
  echo "no errors in books"
else
  errors="${errors}error in books\n"
fi

sudo rsync -avh --delete --no-o --no-g /home/xralf/source_code /media/extdevice/rsync_backups/
if [ "$?" -eq "0" ]
then
  echo "no errors in source_code"
else
  errors="${errors}error in source_code\n"
fi

# more such directories with this code pattern

echo ${errors}

後でスクリプトが実行されるのを見ない計画だったので、結果を見てすべてがうまくいったと信じたかったのです。スクリプトを実行しましたが、最終的に私が持っている唯一の情報は、正確にerror in source_codeエラーが何であるか(どのファイルがエラーを引き起こしたか)はわかりませんでした。

ベストアンサー1

あなたの優先順位ポケットそして早く(例:プロセス数を最小限に抑えますが、この場合はCPUやメモリではなくディスクIOに制限されます。)

#!/bin/bash
sudo rsync -a --delete --no-o --no-g \
       /home/xralf/{audio,books,source_code} \
       /media/extdevice/rsync_backups/ &&
    echo "rsync completed successfully" 1>&2 || echo "rsync ended with errors" 1>&2

この-vオプションを削除すると、出力のノイズが減り、明示的なエラー(存在する場合)に集中できます。1>&2エラーメッセージが予想される場所に送信されるようにSTDOUTをSTDERRにリダイレクトします。無人で実行している場合は、次の選択肢が組み込みのものよりも優れている可能性がありますが、echo追加のプロセスが必要です。

  1. loggerサーバーを使用して集中処理にメッセージを送信できますsyslog。正確な構文は、サーバーの構成によって異なります。

  2. タイミング情報を追加するために、スクリプトの最後の行は次のdateようになります。

date +"[%Y/%m/%d %H:%M:%S] rsync completed successfully" 1>&2 || \
date +"[%Y/%m/%d %H:%M:%S] rsync ended with errors" 1>&2

次のようなものを出力します。[2022/12/05 14:37:27] rsync completed successfully

おすすめ記事