expectのタイムアウト値
6月9日のエントリで書いたexpectを使ったスクリプト。
ファイルを順繰りにscpするものですが、一定サイズ以上のファイルをscpしているときに途中でセッションが切れてコピーが不完全に終了する現象が発生。
しらべてみると、expectのタイムアウト値がデフォルトで10秒になっていて、わりと大きなサイズのファイルでコピーに10秒以上かかる場合途中で終了していました。
timeout値を-1に設定すると、タイムアウトしないとのこと。以下のように修正しました。
#!/bin/bash DATADIR=/home/hogehoge/ for i in `find $DATADIR -ctime -2 -type f -print` do /usr/local/bin/expect -c " set timeout -1 ← これを追加 spawn scp $i account_name@hostname:/export/home/account_name expect { \"Are you sure you want to continue connecting (yes/no)\" { send \"yes\r\" expect \"Password:\" send \"PASSWORD\r\" } \"Password:\" { send \"PASSWORD\r\" } } expect eof " done