rsync 警告は抑制しますが、エラーは抑制しません。

rsync 警告は抑制しますが、エラーは抑制しません。

rsyncホームディレクトリなしでアカウントを使用して、あるサーバーから別のサーバーに転送します。

rsync user@server:source target
Password:
Could not chdir to home directory /dev/null: Not a directory
bash: /dev/null/.bashrc: Ist kein
Verzeichnis

rsync成功したようだから。警告する代わりにメッセージ間違い理由を説明するメッセージrsync 失敗

rsync(簡単)知る方法はありますか?ただ印刷エラー(存在する場合)失敗

答え1

Could not chdir to home directoryニュースと言えます。はい間違い。

rsync同様のシナリオでわかるように、これは機能ではありません(nohomeホームディレクトリなしで作成したアカウントでした)。

ssh nohome@localhost date
nohome@localhost's password:
Could not chdir to home directory /dev/null: Not a directory
Thu  1 Aug 07:02:05 UTC 2019

メッセージを抑制する方法が見つかりません(ssh -qどちらrsync -qも関連する効果はありません)。

の場合、rsyncメッセージも表示されません。すべてのエントリが正常に送信されると、rsyncホームディレクトリが欠落しているかどうかにかかわらず、終了ステータスはSUCCESS(0)です。

touch /tmp/x
rsync -av nohome@localhost:/tmp/x /tmp/y; echo Status=$?
nohome@localhost's password:
Could not chdir to home directory /dev/null: Not a directory
receiving incremental file list
x

sent 43 bytes  received 83 bytes  50.40 bytes/sec
total size is 0  speedup is 0.00
Status=0

答え2

まあ、私は解決策を見つけました。

if ! output=$(rsync user@server:source target 2>&1); then
  echo "$output"
fi

出力(stdoutとstderr)は変数に格納され、終了コードが0以外の場合にのみ印刷されます。

より良い方法があるかどうかはわかりませんが、これは私にとって間違いなく効果的です。

背景

ユーザーは実際にはコンピュータアカウントであり、実際のアカウントはrsyncfile()をパスワードとして受け入れるラッパースクリプトを介して/etc/machine.secret呼び出されます。スクリプト自体が実行されるため、cron問題が発生した場合にのみメールを受け取る方法を見つける必要があります。

何もしないということは、スクリプトが呼び出されるたびに「エラー」Eメールを受け取ることを意味し、非常に簡単なことはエラーEメールを2>/dev/nullまったく受け取らないことを意味するので、特定のメッセージをフィルタリングする方法を見つける必要があります。

答え3

-qスイッチを試してみましたか?エラーではなくメッセージを抑制します。

rsync -q user@server:source target

関連情報