| コマンド | 説明 |
|---|---|
| expect | 対話形式のコマンドを自動化する |
sudo yum install expect
cron で expect が期待通りに動かない。それを解決した時のメモ。
下記のような shell スクリプトで、 cron + expect が正常に動作した。
#!/bin/sh
function do_rsync() {
passwd=hogefuga
expect -c "
spawn $1
expect \"Enter passphrase:\"
send \"$passwd\n\"
#interact
expect eof
exit
"
return 0
}
do_rsync 'rsync -av --delete -e "ssh -i /path/to/id_rsa" hoge@source_server:/path/to/source_dir/ /path/to/dest_dir/'
interact 命令を止めて、下記2行を採用した。
expect eof exit
interact命令は、「制御をユーザに返す」ことを指示します。
そのため、cron の場合、制御を返されても引き継ぐユーザーがおらず、正常に動作していなかったようです。