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以外の場合にのみ印刷されます。
より良い方法があるかどうかはわかりませんが、これは私にとって間違いなく効果的です。
背景
ユーザーは実際にはコンピュータアカウントであり、実際のアカウントはrsync
file()をパスワードとして受け入れるラッパースクリプトを介して/etc/machine.secret
呼び出されます。スクリプト自体が実行されるため、cron
問題が発生した場合にのみメールを受け取る方法を見つける必要があります。
何もしないということは、スクリプトが呼び出されるたびに「エラー」Eメールを受け取ることを意味し、非常に簡単なことはエラーEメールを2>/dev/null
まったく受け取らないことを意味するので、特定のメッセージをフィルタリングする方法を見つける必要があります。
答え3
-q
スイッチを試してみましたか?エラーではなくメッセージを抑制します。
rsync -q user@server:source target