조언을 듣고자 글을 남깁니다 (bash shell)

incle의 이미지

안녕하세요 질문이 있어서 글 남깁니다
솔루션에서 syslog를 통해 여러 로그를 남기고 있는데요 여기서 제가 원하는 특징 키워드가 포함된 로그를 별도로 따로 빼고 싶습니다

그래서
cat aa/* | grep setting | grep korea >> /root/test/file

이런 명령어를 통해 'korea' 키워드가 들어간것만 /root/test/file로 빼고 있는데요
이 작업을 크론에 5분에 한번씩 동작하도록 등록 하였습니다

근데 제가 원하는것은 파일에 korea라는 키워드가 등록될때만 쌓이게 하고싶은데 5분마다똑같은 파일을 계속 덮어쓰다보니 내용도 너무 많고 다 중복이라 생각하는 데이터가 나오지 않고 있습니다.

bash로 개선할수있는 좋은 방안 없을까요?

tail 을 백그라운드로 계속 실행시켜서 로그안에 저 키워드가 들어갈때만 파일로 옮기고싶은데
조언 부탁드리겠습니다.

swish95의 이미지

tail -f aa/* | grep setting | grep korea >> /root/test/file

------------------------------------------------------------
ProgrammingHolic

indra의 이미지

서버 운영 환경이 너무 다양하고 원하시는 내용이 아닐 수도 있어서 예상 가능한 환경을 가정하고 말씀드립니다.
cat aa/*를 보니까 aa 디렉터리 안에 여러 로그파일이 존재하는 것으로 추정됩니다.
원하시는 내용이 '중복된 데이터의 배제'라면 >> (append)가 아닌 > (newfile)로 redirection을 정해주시면 될 듯 합니다.

cat aa/* | grep setting | grep korea > /root/test/file

질문 올리신 분이 cron으로 정해진 시간마다 돌아가도록 만드셨다는 것을 보아 aa 디렉터리 안에 있는 파일들의 내용을 전부 탐색하는 overhead에 대해서는 중요한 문제가 아닌 것으로 가정했습니다.

위 스크립트를 조금 손 보자면 다음과 같이 축약할 수 있습니다.

grep -h setting aa/* | grep korea > /root/test/file

CentOS7 기준으로 설치된 grep의 -h 옵션은 여러 파일을 탐색 할 때 출력되는 파일이름의 정보를 생략하는 옵션입니다.
또한 grep으로 찾는 내용의 기준이 setting이라는 문자열과 korea라는 문자열이 모두 포함된 라인을 찾으시는 것 같은데,
만일 grep이 -E옵션을 통해 Extended Regular Expression을 지원하고 있고, setting이라는 문자열 뒤에 korea라는 문자열이 오는 경우 다음과 같이 RegExp를 사용할 수 있습니다.

grep -h -E "setting.*korea" aa/* > /root/test/file

RegExp 내용은 "setting 문자열 뒤에 . => 임의의 문자가 * => 연속적으로 나타나고, korea 라는 문자열이 존재할 때" 입니다.

굳이 tail을 쓰시고자 한다면 위 내용들을 조합하여 다음과 같은 스크립트 사용을 고려 해 보실 수 있습니다.

tail -f aa/* | stdbuf -o0 grep -E 'setting.*korea' > /root/test/file &

위 스크립트는 백그라운드로 실행되기 때문에 cron 실행이 필요치 않을 것으로 예상됩니다.
stdbuf의 사용은 standard output의 flush를 위한 방편입니다.

tail의 사용으로 장기간 오픈된 log파일이 삭제되거나 rotate되는 경우 file descriptor가 닫히고 script실행에 장애가 있을 수 있으니
이러한 예상 가능한 점도 충분히 숙지하시고 사용하시면 될 듯 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.