プログラミング

SSHでのrsyncをcronとexpectを使って完全に自動化する

SSHでのrsyncをcronとexpectを使って完全に自動化したいと思います。

rsync expect

こんな感じでスクリプトを作ります。

#!/usr/bin/expect

# log_file /var/log/expect.log

set PW "password"
set Prompt "\[#$%>\]"
# set RemoteHost [lindex $argv 0]

set timeout 5

spawn rsync -av -e "ssh" -r "/mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/" root@150.0.0.0/root/lib/contacam
# spawn env LANG=C /usr/bin/ssh ${RemoteHost}
expect {
    -glob "(yes/no)?" {
        send "yes\n"
        exp_continue
    }
    -glob "password:" {
        send -- "${PW}\n"
    }
}

expect {
    -glob "${Prompt}" {
        interact
        exit 0
    }
}

set PW "password"のところとspawn rsync -av -e "ssh" -r "/mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/" root@150.0.0.0/root/lib/contacamは変更してください。

作ったスクリプトを実行してみます。

yuis@DESKTOP-UHU8FSH:/mnt/c/pg$ /mnt/c/pg/expect/rsync_ssh
spawn rsync -av -e ssh -r /mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/ root@0.0.0.0:/root/lib/contacam
root@0.0.0.0's password:
sending incremental file list
created directory /root/lib/contacam
./
01/
01/31/
01/31/確認済み/
01/31/確認済み/det_2018_01_31_08_23_53.gif
01/31/確認済み/det_2018_01_31_08_23_53.mp4
01/31/確認済み/det_2018_01_31_08_24_12.gif
01/31/確認済み/det_2018_01_31_08_24_12.mp4
01/31/確認済み/det_2018_01_31_08_26_38.gif
01/31/確認済み/det_2018_01_31_08_26_38.mp4
01/31/確認済み/det_2018_01_31_08_28_57.gif
01/31/確認済み/det_2018_01_31_08_28_57.mp4
01/31/確認済み/rec_2018_01_31_16_17_52.mp4

sent 1,986,489 bytes  received 247 bytes  1,324,490.67 bytes/sec
total size is 1,985,304  speedup is 1.00

はい、ちゃんとパスワード入力も自動化してくれましたね。

次はこれをcronに登録します。

rsync cron

これをcronに登録すればたぶんできます。

*/10 * * * * /mnt/c/pg/expect/rsync_ssh

しかし、bash on windowsではcronがバグが多すぎて使えません。

なので、シェルスクリプトでループ回して実行、というやり方をしたいと思います。
そのうちマイクロソフトがcronのバグ直してくれるでしょうから、それまでの辛抱です。

まず、テスト用。

#!/bin/bash

while [ 1=0 ]
do
  sleep 3
  echo "===================================================================="
  df -h
done

では、こっちも。

#!/bin/bash


while [ 1=0 ]
do
  sleep 3
  echo "===================================================================="
  /mnt/c/pg/expect/rsync_ssh
done

こんな出力がされましたでしょうか。

$ . /mnt/c/pg/dev.sh
====================================================================
spawn rsync -av -e ssh -r /mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/ root@1.1.1.1:/root/lib/contacam
root@1.1.1.1's password:
sending incremental file list

sent 334 bytes  received 15 bytes  698.00 bytes/sec
total size is 1,985,304  speedup is 5,688.55
====================================================================
spawn rsync -av -e ssh -r /mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/ root@1.1.1.1:/root/lib/contacam
root@1.1.1.1's password:
sending incremental file list

sent 334 bytes  received 15 bytes  698.00 bytes/sec
total size is 1,985,304  speedup is 5,688.55
====================================================================
spawn rsync -av -e ssh -r /mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/ root@1.1.1.1:/root/lib/contacam
root@1.1.1.1's password:
sending incremental file list

sent 334 bytes  received 15 bytes  698.00 bytes/sec
total size is 1,985,304  speedup is 5,688.55

では、5分毎に実行してくれるようにしましょう。

#!/bin/bash

while [ 1=0 ]
do
  sleep 300
  echo "===================================================================="
  /mnt/c/pg/expect/rsync_ssh
done

これで完了です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です