サーバのバックアップ用shellを
ちまちまと手作りしていたときに軽くはまったので備忘録として残す。
前提
環境はubuntu 16.04
のはず。
取得したバックアップファイルをサーバ間で持ち合うようにしたかった。
で、サーバ間でファイルコピーするのにscpを使ったらこいつが意外に曲者だった。
scp
メモ代わりに使用例だけ。
scp -i [秘密鍵ファイル] [転送ファイル] [転送先ユーザ]@[転送先IP]:[転送先ディレクトリ]
秘密鍵 key.txt を使って local.txt を転送先サーバの user ユーザの ./remotedir にコピーするときは↓
scp -i key.txt local.txt user@xxx.xxx.xxx.xxx:./remotedir
はまったところ
標準出力に出てくる転送結果をファイルに出そうとしたら出ない。。。
何度やっても出ないのでググってみたら、みんな結構同じことで悩んでる。
で、参考にさせて頂いた方法がこちら↓
ssh -t -q -A localhost scp -i key.txt local.txt user@xxx.xxx.xxx.xxx:./remotedir >> log.txt
実行してみると確かに出力される!イケるやん!
これでlog.txt
の中みて100%以外の結果が出てたらアラート出せばいいかなー、とか思ってたら。。。
再度はまったところ
log.txt
にいらない行が入ってくる。。。
^Mlocal.txt 0% 0 0.0KB/s --:-- ETA^Mlocal.txt 100% 3268 3.2KB/s 00:00
余計な改行コード(CR)と転送開始時のログ?が入ってる。
複数ファイルを転送したときには空白行も入ってくる。
うーむ。結果チェックしづらい。
問題点は以下。
- 改行コード(CR)が邪魔
- 空白行が邪魔
- ETA(Estimated Time Arrival:到着予定時刻 だそうな)の行が邪魔
軽くググってみたけど消し方が分からなかったので、
出てきたモノを取り除いて使うことにした。
余計なものが出てくるなら除いてしまえばいいじゃない
と、いう事で。
以下のコマンドで余計なものを取り除く。
sed 's/^M/\n/g' log.txt | sed '/^$/d' | grep -v ETA
※^M
はctrl+V→ctrl+Mで入力可能。
今思えば^M
を改行に置き換える必要なかったけど。。。
まぁ良いか。
local.txt 100% 3268 3.2KB/s 00:00
これで結果チェックしやすくなった!
今回のオチ
cronでscpさせるとファイルにも結果でないですやん。。。
調べる気力暇がなくなってしまったので、
結局scpの結果じゃなくてls
使ってローカルとリモートのファイルサイズを比較することに。
意味なし!