원격 호스트의 grep 로그 파일

원격 호스트의 grep 로그 파일

원격 호스트의 로그 파일에서 문자열을 찾으려고 합니다. 하지만 스크립트를 실행하는 호스트로 에코를 다시 가져올 수는 없습니다.

#!/bin/bash
#dt=$(date +"%Y%m%d")
#HHMM=$(date '+%H:%M')
key="keys/cash_prod_key"



if
        ssh -o StrictHostKeyChecking=no -qni $key user@host "cat /var/log/FILE_send.log | grep FILENAME | grep -i success"\;
then
        echo "Success"
fi

나는 이것이 가장 올바른 접근 방식이라고 생각하지 않습니다.

답변1

문제는잘못된 호스트 이름.

이 답변은 더 나은 방식으로 코드를 작성하는 방법에 중점을 둡니다.

원격 호스트에서 전체 파이프라인을 실행할 필요는 없습니다. 명령줄에서 복잡한 명령을 실행하면 ssh특히 인용 관점에서 오류가 발생하기 쉽습니다.

대신에:

#!/bin/bash

key="keys/cash_prod_key"

ssh_args=( -o StrictHostKeyChecking=no -qni "$key" user@host )

if ssh "${ssh_args[@]}" cat /var/log/FILE_send.log |
   grep -F 'FILENAME' |
   grep -q -i -F 'success'
then
    echo 'Success'
fi

이는 cat원격 호스트에서만 실행된 다음 grep두 명령을 모두 로컬에서 실행합니다.

또한 패턴으로 사용되는 문자열이 다음과 같다고 가정하고 명령 -F에 플래그를 추가했습니다.grep아니요정규식이지만 검색하려는 리터럴 문자열입니다. 마지막 grep사용 -q, 실제로는 관심이 없기 때문에보다출력, string 이 포함되어 있는지 확인하세요 success.

읽기 쉽도록 사용된 매개변수를 ssh배열에 넣어 나중에 호출에 사용할 수 있도록 했고, 파이프 기호 뒤에 줄바꿈을 삽입하여 줄도 약간 더 짧게 만들었습니다. 스크립트는 여전히 문법적으로 정확합니다. 또한 변수 등의 확장은 어떤 맥락인지 알지 않는 한 항상 큰따옴표로 묶어야 합니다.이는 필수 사항이 아닙니다..

ssh명령이 올바른 방식으로 호출되었다고 가정합니다 .

관련 정보