質問編集履歴
1
文法の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,55 +1,13 @@
|
|
1
1
|
### 解決したいこと
|
2
2
|
ローカルサーバからsftp接続し、リモートサーバへローカルサーバのログファイルを転送するシェルスクリプトを作成しております。
|
3
|
-
その際に、ログファイルの転送結果をログ出力したいのですが、
|
3
|
+
その際に、ログファイルの転送結果をログ出力したいのですが、成功/失敗ステータスをログファイルに付与することは可能でしょうか。
|
4
4
|
|
5
5
|
##### ログ出力にて行いたい要件
|
6
6
|
・単一スクリプト
|
7
7
|
・ワンライナー
|
8
8
|
・処理開始時間 (日付/時間)
|
9
9
|
・転送状況
|
10
|
-
|
10
|
+
・転送結果(成功/失敗ステータス)
|
11
|
-
・scpなどではなく、sftpにて実行
|
12
|
-
|
13
|
-
*expectなどのインストールが必要なものは使用出来ません。
|
14
|
-
|
15
|
-
### 現在のソースコード
|
16
|
-
```bash
|
17
|
-
#!/bin/bash
|
18
|
-
|
19
|
-
LOG1_PATH="/var/log/"
|
20
|
-
LOG1=(`find $LOG1_PATH -name "sample1*.gz" -mtime +0 -and -mtime -4`)
|
21
|
-
|
22
|
-
# ディレクトリ存在チェック
|
23
|
-
LOG2_PATH=“/var/log/sample/”
|
24
|
-
if [ -d $LOG2_PATH ]; then
|
25
|
-
LOG2=(`find $LOG2_PATH -name "sample2*.gz" -mtime +0 -and -mtime -4`)
|
26
|
-
fi
|
27
|
-
|
28
|
-
# 3日分のログファイルを転送出来るよう設定
|
29
|
-
LOG1_PUT=
|
30
|
-
for i in "${LOG1[@]}"
|
31
|
-
do
|
32
|
-
LOG1_PUT+="put $i"$'¥n'
|
33
|
-
done
|
34
|
-
|
35
|
-
LOG2_PUT=
|
36
|
-
for i in "${LOG2[@]}"
|
37
|
-
do
|
38
|
-
LOG2_PUT+="put $i"$'¥n'
|
39
|
-
done
|
40
|
-
|
41
|
-
# sftp接続
|
42
|
-
sftp -i /home/user/.ssh/id_rsa username@aa.bb.cc.dd << END 2>&1 | sed -e 's/sftp> /¥n/g' | sed -e 's/¥s¥+$//g' -e 's/¥s¥+/ /g' -e '/^&/d' -e "s/^/$(date $'+%Y-m-%d %T') /g" >> log_sample.log
|
43
|
-
cd /var/$1
|
44
|
-
|
45
|
-
$LOG1_PUT
|
46
|
-
$LOG2_PUT
|
47
|
-
|
48
|
-
quit
|
49
|
-
END
|
50
|
-
```
|
51
|
-
上記の「# sftp接続」箇所のリダイレクトを指定することで、処理の実行時間、ワンライナー、転送状況の出力は出来るようになりました。
|
52
|
-
ただ、成功/失敗ステータスのみ出力出来ていない状況になります。
|
53
11
|
|
54
12
|
### 自分で試したこと
|
55
13
|
「$?」にて成功時には0, 失敗時には1のステータスを付与することが出来ると思い、「LOG1_PUT+="put $i"$'¥n'」箇所に追記したりしましたが下記のように認識され、意図通りに出力が出来ませんでした。
|