2008. 4. 6.

Linux expact의 문제점

이번에 cron job으로 일정 시간마다 돌리는 shell을 만들면서 password를 입력해야하는

문제가 발생하였다.

기존에는 bash로 되어있었는데, 이것으로 interactive 한 처리를 하기가 힘들다는 것이었다.



그래서 찾아본결과 알아낸것이 expect



자세한 내용은 man expect하면 명령어 list가 쭈르륵 나온다.



그런데 문제가 생겼다.



대략 job processing시간은 10분정도.

즉 10분정도 job이 돌아야하는데 자꾸 중간에 끊어져버리는것이었다.



--------------------------------------------------------------

#!/usr/bin/expect -f

spwan <10분정도 걸리는 작업>

expect "Password"

send "암호"

expect eof

--------------------------------------------------------------



이렇게 했는데 expect eof 가 실제로 작업이 끝나기도 전에 종료된다는 점이었다.

별의 별 짓을 다해도 해결이 안되었다.

나중에 안 것이지만 expect 에는 timeout이라는 것이 있었다.

default가 timeout 30초

즉 30초만 되면 자동으로 terminate 된 것이었다.



그래서 수정한것이..

--------------------------------------------------------------

#!/usr/bin/expect -f

set timeout -1 #infinite

spwan <10분정도 걸리는 작업>

expect "Password"

send "암호"

expect eof

--------------------------------------------------------------



expect

프로그램 안에서 프로그램을 돌리는 것

그럴려면 ubuntu안에서 expect를 설치해야함

===============================================================================

# !/usr/lacal/bin/expect

# wrapper to make passwd(1) be non-interactive

# username is passed as lst arg, passwd as 2nd

set passwd [lindex $argv 1]

set username [lindex $argv 0]



spawn /usr/bin/passwd -> 프로그램 부르는 것

expect {*passwd:} => 앞에 뭐가 나오던지 마지막에 passwd:라는 메세지가 나올때까지 기다려라

send "$passwd\n" => 거기다 $passwd를 넣어주거라

expect {*passwd:}

send "$passwd\n"

expect eof

===============================================================================

expect login example -> 검색해보시오



expact의 문제점

원래 expect는 한줄한줄 입력을 받고 저장을 하기에는 쉬우나

순서대로가 아닌 입력에 따라 저장위치가 달라진다거나 하는 등 왔다갔다 하는 경우에는 쓰기 힘듬

=> curses -> 화면을 지우고 몇번째 칼럼을 저장하고 하는 라이브러리

댓글 없음: