이번에 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 -> 화면을 지우고 몇번째 칼럼을 저장하고 하는 라이브러리
2008. 4. 6.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기