解決したいこと
ローカルサーバからsftp接続し、リモートサーバへローカルサーバのログファイルを転送するシェルスクリプトを作成しております。
その際に、ログファイルの転送結果をログ出力したいのですが、成功/失敗ステータスをログファイルに付与することは可能でしょうか。
ログ出力にて行いたい要件
・単一スクリプト
・ワンライナー
・処理開始時間 (日付/時間)
・転送状況
・転送結果(成功/失敗ステータス)
自分で試したこと
「$?」にて成功時には0, 失敗時には1のステータスを付与することが出来ると思い、「LOG1_PUT+="put $i"$'¥n'」箇所に追記したりしましたが下記のように認識され、意図通りに出力が出来ませんでした。
(転送されたログファイルがsample1.gzではなく0となってしまいます。)
log
12022-04-27 12:00 put /var/log/sample1.gz 0 22022-04-27 12:00 Uploading /var/log/sample1.gz to /log/$1/0
また、確認を込めて「cd /var/$1」箇所に「$?」を指定してみたところ失敗時にも0のステータスが渡されておりました。
参考記事を見ていると下記のような文言がありました。
OpenSSHのSFTPユーティリティは、失敗するとその呼出元へゼロ以外の終了ステータスを戻します。しかし、SFTP を呼び出しているのはあなたの CL プログラムではありません。Expect スクリプトが呼び出しているのです。したがって、Expect スクリプトがエラーを検出せず、CL プログラムにゼロを戻している場合、CL プログラムには何かが失敗したことを告げる術はありません。
これは、sftp(対話型)にてステータスを取得することは不可能ということでしょうか?
それともソースコードを少しひねることでステータスを取得することは可能でしょうか?
その他に関数を使用したログ出力方法を検討しましたが、sftpにて関数を呼び出すことが出来ず、リダイレクトを使用したログ出力方法を実装しました。
なるべく現状のソースコードを変えることなく実装したいのですが、自身の力量では解決できず、有識者様のご教授を頂けますと幸いです。
長くなり恐縮ですが、よろしくお願いいたします。



