Unix :: コマンド / expect

コマンド説明
expect対話形式のコマンドを自動化する


インストール

sudo yum install expect


cron で 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 の場合、制御を返されても引き継ぐユーザーがおらず、正常に動作していなかったようです。