ファイルがリモートサーバーに送信されない場合にログを作成するシェルスクリプト

ファイルがリモートサーバーに送信されない場合にログを作成するシェルスクリプト

基本的にリモート サーバー間でファイルの rsync を実行する小さなスクリプトがあります。認証用に ssh キーが生成されています。

スクリプトにはこれだけが存在します

rsync /root/Desktop/cpfies/files/*.xls user@host:root/Desktop/cpfies/moved

基本的に私が作成したいのは、このスクリプトのログ メソッドです。特別なものではなく、ただこれだけです。接続が失われ、ファイルが送信されない場合、ログに「ファイルが送信されず、接続が確立されていません」と表示されます。

また、ファイルが送信された場合は、ログに正常に送信されたことが表示されます。

または、ホストまたはユーザーが間違っている場合は、ログに表示されます。

ありがとう、敬具、サガール・マンダル

答え1

$?失敗した試行のみをログに記録したい場合は、最後のスクリプトの戻り値であるを調べることで rsync の戻り値を取得できます。rsync成功した場合は 0 を返し、さまざまなエラーの場合は 0 以外を返します (https://lxadm.com/Rsync_exit_codes)。私は次のようにします。

#!/bin/bash

ret_text=$({rsync /root/Desktop/cpfies/files/*.xls user@host:root/Desktop/cpfies/moved} 2>&1)

if [ $? -ne 0 ]; then
    echo rsync error code $? on $(date)
    echo rsync output follows
    echo $ret_text
fi

これを に入れてscript実行するときに、その出力を のようにログ ファイルにリダイレクトするscript >> log_fileか、 スクリプトを呼び出して、>> log_fileスクリプト内の各 echo コマンドの後に追加することもできます。

成功した試行も記録したい場合は、

rsync /root/Desktop/cpfies/files/*.xls user@host:root/Desktop/cpfies/moved &>> log_file

または

rsync --log-file=log_file /root/Desktop/cpfies/files/*.xls user@host:root/Desktop/cpfies/moved

-vまた、 またはを追加して、rsync が生成する情報量を増やすことをお勧めします。または をさらに-vv使用することも可能ですが、マニュアルにはデバッグ目的であると記載されています。-vvv

関連情報