原因は、expectスクリプトの最後が、
interact
となっていたこと。
これを、
expect eof
exit
と直すことで無事動かすことが出来ました。
元のシェルスクリプト(端末で動作)
#!/bin/sh
host="user@host"
pass="password"
command="実行するコマンド"
expect -c "
set timeout 10
spawn ssh ${host} ${command}
expect \"Are you sure you want to continue connecting (yes/no)?\" {
send \"yes\n\"
expect \"${host}'s password:\"
send \"${pass}\n\"
} \"${host}'s password:\" {
send \"${pass}\n\"
}
interact
"
修正後のシェルスクリプト(crontabで動作)
#!/bin/sh
host="user@host"
pass="password"
command="実行するコマンド"
expect -c "
set timeout 10
spawn ssh ${host} ${command}
expect \"Are you sure you want to continue connecting (yes/no)?\" {
send \"yes\n\"
expect \"${host}'s password:\"
send \"${pass}\n\"
} \"${host}'s password:\" {
send \"${pass}\n\"
}
expect eof
exit
"
参考にしたページ:
crontabでexpectコマンドが動かない
私も同じ状況になり悩みました。
返信削除こちらの記事に従って、interactをexpect eof; exitに差し替えることで無事解決しました。
大変助かりました。ありがとうございました。
ありがとうございました。
返信削除悩んでいた現象が回避されました。
諦めかけていたところ、こちらの記事を拝見して解決しました。
返信削除ありがとうございました。
数年前の記事ですが助かりました。
返信削除ちなみにJenkinsからシェルスクリプトで実行する際に同じ現象が起きており、これで回避できました