리눅스 관련 질문입니다( 동일작업 반복을 효율적으로 하는 툴 질문 ).
글쓴이: jungwook / 작성시간: 화, 2010/02/16 - 7:36오후
안녕하세요??
제가 동일한 작업을 반복하는데, 툴을 이용해서 좀 효율적으로 할 수 있나 싶어 질문드립니다.
지금 우분투를 사용중인데 터미널을 5개 정도 띄우고 ssh로 접속해서 어떤 프로그램을 실행시켜서 동일한 작업을 합니다.
즉 터미널에 들어가는 인풋이 같다는 말이죠.
이걸 좀 효율적으로 하고 싶은데 지금은 그냥 터미널 5개 띄우고 하나의 터미널에 어떤 인풋을 주고 드래그해서 마우스 휠을 이용해서 복사하는 방식을 이용하는데요.(무식하죠.)
좋은 방법 없을까요??
expect + perl 를 쓸려니 나중에 다른 터미널의 어떤 조건을 보고 제가 직접 타이핑을 해야되서 무리일듯합니다.
Forums:
http://kldp.org/node/87246 참고
http://kldp.org/node/87246 참고
.screenrc에 시작
.screenrc에 시작 명령들 적을 수 있습니다.
$ cat .screenrc-monitor
.......
split
split
split
split
split
split
screen openvpn /etc/openvpn/######.conf-noauto
focus down
screen bash -c "while true; do ssh ### vmstat -S M 1; sleep 1; done"
focus down
screen bash -c "while true; do ssh ### vmstat -S M 1; sleep 1; done"
focus down
screen bash -c "while true; do sensors; sleep 5; done"
focus down
screen bash -c 'while true; do (ssh ### "while true; do sensors; sleep 5; done"); sleep 5; done'
focus down
screen bash -c 'while true; do (ssh ### "while true; do sensors coretemp-isa-\*; sleep 5; done"); sleep 5; done'
focus down
screen bash -c "while true; do scheduler -vv; done"
focus down
$ screen -c .screenrc-monitor
답변 감사합니다.
그런데
split
split
split
split
split
screen bash -c "ssh cho@xx.xx.xx.xx"
focus down
screen bash -c "ssh cho@xx.xx.xx.xx"
focus down
screen bash -c "ssh cho@xx.xx.xx.xx"
focus down
screen bash -c "ssh cho@xx.xx.xx.xx"
focus down
screen bash -c "ssh cho@xx.xx.xx.xx"
focus down
$screen -c .screenrc-monitor
실행을 하고 password를 넣으면 서버에 잘 접속합니다.
server:~$
이제 여기서(서버내) 다른 디렉토리로 이동하고 해당 디렉토리의 프로그램을 실행하고 싶은데, 그것도 가능한가요?
또한 위의 스크립트를 실행하게 되면 하나의 윈도우에 5개가 split되어서 나오는데 한번에 같이 내용을 입력해주는 것이 가능한지 궁금하네요.
감사합니다.
ssh에게 바로 커맨드
ssh에게 바로 커맨드 실행하라고 하면 되지 않나요? 같이 입력은 모르겠습니다.
ssh에게 바로 컨맨드 실행
"ssh에게 바로 커맨드 실행하라고 하면 되지 않나요?"
이게 무슨 말인가요?? ㅡㅡ;
답변 감사드립니다.
그냥 구체적으로
그냥 구체적으로 질문하시면 쉽게 답을 얻으실꺼 같은데..
질문자체가 좀 불명확하군요..
일단 쉘스크립트 조금작성해두셔도 금방해결될일로 보입니다.
더구나 궂이 터미널여려개안띄워도 백그라운드 작업도 가능합니다.
질문을 다시 하겠습니다.^^
먼저 ssh로 서버에 접속합니다.
이건 위에분의 도움으로 split를 하니 다섯개의 창에 모두 ssh 접속을 하더군요.
이제 접속한 서버에 passwd를 입력하고 난 후
server> cd ~/running_program
server> ./run_program input input
이런식으로 프로그램을 실행시키는 겁니다.
물론 나눠진 창 다섯개에서 모두 이런식으로 서버의 해당 디렉토리로 이동하고 프로그램을 실행하는 거죠.
"일단 쉘스크립트 조금작성해두셔도 금방해결될일로 보입니다."
=> 쉘스크립트로 서버와 interactive 할 수 있나요? 패스워드 입력도 넣어주어야되는데..
"더구나 궂이 터미널여려개안띄워도 백그라운드 작업도 가능합니다."
=> 이렇게 실행시킨 프로그램을 나중에 다른 터미널의 결과를 보고 다시 인풋을 입력해주어야 되서 백그라운드 작업은 힘들꺼 같습니다.
답변 감사합니다.
뻘 답변이라
삭제.
바로 실행은 ssh뒤에
바로 실행은 ssh뒤에 그냥 명령을 적으면 되고, 암호는 key pair로 로긴하면 필요없고, 때려죽여도 패스워드를 입려해야겠으면 expect로 로긴, 커맨드 실행 후 interactive로 가도록 스크립트 만들어서 하면 됩니다. screen, ssh, bash, expect 맨페이지들만 읽으시면 정보는 충분하리라 생각합니다.
ㅎ 친절한 답변 감사합니다.
ㅎ 늦은 시간인데 친절한 답변 감사합니다.
좋은 주말되세요.
추가 질문입니다.
이런식으로 실행하였고, ssh-keygen 을 이용하여 ssh 는 passwd입력없이 로그인되도록 하였습니다.
궁금점은 서버내 실행된 프로그램에서 장시간 동작후에 "ctrl+c"를 눌러서 추가적인 입력을 주어야되는데, 여기서 프로그램이 중단되고 [screen is terminating] 되어버리네요.
screen bash -c "ssh cho@10.20.12.43 (서버내 프로그램 실행)"
이 문장이 종료되는 것 같은데, 혹시 방법이 있을까요??
결국 expect로 해결했네요.
split
screen bash -c "expect파일"
focus down
그리고 스크립트에서 원하는 작업이 끝나면 $exp->interact() 함수를 쓰니 쉽게 해결이 되네요.
ㅡㅡ; 근데 스크린이 여러 창으로 나뉘니 스크롤을 만들어야 되는데 이것도 잘 안되네요.
그리고 최종 목표는 두 개의 expect 파일끼리 서로 통신을 하는것인데, interact, finterconnect될 듯한데 ㅡㅡ;
즉, expect를 이용하여 작업 A에서 작업을 수행
곧 expect를 이용하여 작업 B에서 작업을 수행
작업 B에서 특정 문자가 나오면 작업 A에 명령을 수행하는 것입니다.
즉 서로 다른 터미널끼리 통신하는 것이네요.
힌트 좀 주세요.
뭐 간단하게는 그냥
뭐 간단하게는 그냥 로그파일처럼 떨어트리시고.. 다른터미널에서 읽으시면되자나요.
댓글 달기