[완료]perl 로그생성(or 파일) 관련 질문입니다. (__)
글쓴이: sasimi2001 / 작성시간: 목, 2009/12/03 - 11:40오후
생전 처음 사용하는 언어를 사용할려다 보니깐 처음부터 끝까지 막힙니다.ㅜㅜ
답변받고 게시글 검색해서 알아낸 사이트로 참고할려고 해도 잘 안되네요..
이번에도 염치없이 다시 질문 드립니다.(__)
#1 use Expect; #2 생략 #3 [qr /[#] /, sub { my $self = shift; #4 $self->send("ssh -l root $ARGV[0] \"df -i | grep /var\" | awk \'{print \$5\, \$6}\' ; exit\n"); #5 $self->log_file("././log/getinfoserver.log", "w"); #6 $self->log_file(); #7 $self->send("exit\n"); #8 exp_continue; }],
이번에 문제가 되는 부분은 이부분 입니다.(명령어는 테스트용 입니다.)
원격서버의 df -i | grep /var | awk '{print $5, $6}' 정보를 ././log/getinfoserver.log 에 기록 할려고 했던 것입니다.
근데 막상 log 파일을 확인해보면 아래같이 저장이 됩니다.
ssh -l root 111.111.111.111 "df -i | grep /var" | awk '{print $5 ^M, $6}' ; exit exit root@111.111.111.111's password: 1% /var logout ^[[H^[[JConnection to 111.111.111.111 closed.^M
제가 원하던거는 1% /var 이부분만 저장을 하고 싶었던 것입니다.
Q.1 결과적으로 perl 에서 원하는 부분만 추출해서 로그파일로 저장하는 방법이 알고 싶습니다.
Q.2 아니면 위에처럼 로그는 그대로 기록하고 원하는 데이터만 뽑아내는 스크립트를 따로 작성해서 처리하는게 효과적일까요?
Q.3 그리고 로그확인하면 ^M 문자도 같이 생기던데 perl 에서 ^M 안생기게 로그파일로 저장할순 없나요?
Forums:
목적에 맞게 제공된
목적에 맞게 제공된 Net::SSH::Expect 모듈이 있습니다.
아래와 같이 명령을 수행하고 출력을 얻어 낼 수 있습니다.
아래와 같이 하나의 셸 커맨드로도 가능합니다.
필요한 경우 .bashrc 에 alias 나 함수를 정의해 두면 됩니다.
ssh -l user localhost df -i | grep /var | awk '{print $5,$6}' >> ./log/getinfoserver_TEST.log
감사합니다.
ssh -l user localhost df -i | grep /var | awk '{print $5,$6}' >> ./log/getinfoserver_TEST.log
그런데 로그파일이 원격서버에 저장되는것이 아니라 펄스크립트를 실행하는 로컬서버쪽에 저장이 되어야 해서요.^^
아뭏든 Net::SSH::Expect 이거 보고 좀더 생각해 봐야겠네요.ㅎㅎ
>> 로 리다이랙트
>> 로 리다이랙트 되는 부분은 ssh 명령어의 인자로 받아지는게 아니므로,
로컬에 기록됩니다.
한가지 더 여쭤볼게요.
로그저장 면에서는 제가 꼭 필요한 기능이 있긴 한데
#!/usr/bin/perl
use Net::SSH::Expect;
my $ssh = Net::SSH::Expect->new (
host => "111.111.111.111",
password=> 'abcd1234',
user => 'root',
raw_pty => 1
);
$ssh->login();
my $who = $ssh->exec("passwd sasimi2k");
=> 이렇게 실행하였을때 기존 expect 문처럼 출력된 스티링을 확인해서 일정 스트링을 넣어주는 기능은 어떻게 구현 하나요?
[qr /Are you sure you want to continue connecting /, sub { my $self = shift;
$self->send("yes\n");
이런 것 처럼요
알려주신 주소 하단부분에 그와 관련된 예제가 나와있긴 한데 잘 안되서요..
간단히 아래와 같이
간단히 아래와 같이 할 수 있습니다.
Expect 모듈에서는 expect 메쏘드 호출에 여러개의 매치와 callback 함수를 등록할 수 있지만,
Net::SSH::Expect 에서는 제공하지 않으므로 필요한 경우 직접 구현해야 할 것 같습니다.
또는 Net::SSH::Expect 모듈이 Expect 를 내부적으로 사용하기 때문에 아래와 같이 할 수도 있습니다.
댓글 달기