데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      리눅스 서버에서 실행한 작업이 중단될 때 슬랙으로 알림 보내기

      singleheart 23.09.27
      4,890 22 3
      DEVOTEE 요약
      리눅스 서버에서 긴 작업을 실행할 때, 작업이 중단되거나 오류가 발생하면 슬랙으로 알림을 받을 수 있는 방법을 소개하는 이 글은 크게 4단계로 나뉩니다. 첫 번째 단계에서는 슬랙 웹후크 URL을 가져오는 방법, 두 번째 단계에서는 curl 명령어를 사용하여 슬랙으로 메시지를 보내는 방법을 설명합니다. 그리고 세 번째 단계에서는 작업 중단을 감지하는 방법을 소개하고, 네 번째 단계에서는 주기적으로 스크립트를 실행하여 알림을 받을 수 있도록 크론탭을 설정하는 방법까지 안내합니다. 이렇게 설정하면 작업 중단에 대해 신속하게 대처할 수 있습니다.

      업무상 리눅스 서버에서 긴 작업을 실행할 때가 많습니다. 짧게는 몇 시간에서 길게는 몇 주에 걸쳐 실행하는데요,

      가끔 서버에 오류가 발생하거나 코드의 버그로 작업이 중단될 때가 있습니다. 그러면 확인하고 문제를 수정해서 작업을 재실행해야 하는데요,

      평일 일과시간에는 수동으로 확인할 수도 있지만 이동중이거나 서버에 접속할 수 없는 상황이라면 문제가 발생했다는 것 자체를 모르겠죠.

      이런 경우에 문제를 감지해서 슬랙으로 알림을 보내는 방법을 설명합니다.


      단계 1: 슬랙 웹후크 URL 가져오기

      1. 슬랙의 Apps에서 Incoming WebHooks 앱을 찾아서 Add를 선택합니다

        image.png

        image.png


      2. Add to Slack 버튼을 누릅니다

        image.png


      3. 메시지를 받을 채널을 선택하고 Add Incoming WebHooks integration을 누릅니다

        image.png


      4. 결과 페이지에서 Webhook URL을 복사합니다

        image.png


      단계 2: curl 명령어를 사용하여 슬랙 메시지 보내기

      아래의 curl 명령어를 사용하여 슬랙으로 메시지를 보낼 수 있습니다. 웹후크 URL을 YOUR_SLACK_WEBHOOK_URL 부분에 붙여넣으십시오.

      #!/bin/bash
      
      # 메시지를 받을 채널을 설정합니다
      CHANNEL=""
      # 슬랙 메시지의 발신자명이 어떻게 표시될지 설정합니다
      USERNAME=""
      # 슬랙 메시지에 사용될 이모지를 설정합니다
      EMOJI=""
      # 슬랙 메시지 첫째줄에 나타날 제목 문구를 설정합니다
      TITLE=""
      # 앞에서 복사한 `Webhook URL`을 붙여넣습니다
      HOOK=WEBHOOK_URL
      
      MSG="에러: 작업이 중단되었습니다"
      PAYLOAD="payload={\"channel\": \"$CHANNEL\", \"username\": \"$USERNAME\", \"text\": \"$TITLE \n\n $MSG\", \"icon_emoji\": \"$EMOJI\"}"
      # -x 옵션은 프록시 주소가 필요한 경우에 사용합니다. 필요한지는 서버 관리자한테 문의합니다.
      /usr/bin/curl -x "프록시 주소" -X POST --data-urlencode "$PAYLOAD" "$HOOK"


      단계 3: 작업 중단 감지하기

      작업이 중단되는 데에는 다양한 원인이 있습니다.

      제가 사용하는 시스템의 경우 기계 고장인 경우도 있었지만, 뚜렷한 원인이 없이 작업이 멈춰있는 경우도 있었습니다.

      저희는 slurm을 사용하여 작업을 관리하고 있는데요, 작업 목록에 작업이 실행중으로 표시되지만 실제로 로그 파일이 업데이트되지 않으면 중단되었다고 보고 알림을 보내기로 하였습니다.

      정말 오류가 발생했는지는 일단 알림을 받고 나서 사람이 눈으로 확인하면 충분하다고 보았습니다.

      #!/bin/bash
      CHANNEL=""
      USERNAME=""
      EMOJI=":alert:"
      TITLE="fatal error"
      
      HOOK=HOOK_URL
      
      for jobid in `/usr/local/bin/squeue -t R -u username -o "%i" | tail -n +2`
      do
          if [[ -z $(find /home/username/MySystem/logs -name $jobid.$jobname.log -mmin -10) ]]
          then
              MSG="ERROR: JOB $jobid ($jobname) has been STOPPED!"
              PAYLOAD="payload={\"channel\": \"$CHANNEL\", \"username\": \"$USERNAME\", \"text\": \"$TITLE \n\n $MSG\", \"icon_emoji\": \"$EMOJI\"}"
              /usr/bin/curl -x "proxy_url" -X POST --data-urlencode "$PAYLOAD" "$HOOK"
          fi
      done

      이 코드에서 에러 감지의 핵심은 다음 if문입니다

          if [[ -z $(find /home/username/MySystem/logs -name $jobid.$jobname.log -mmin -10) ]]

      저희 시스템에서 로그파일을 $jobid.$jobname.log 형식으로 저장하고 있는데, 이 파일이 최근 10분 동안 갱신되지 않았으면 오류로 보고 알림을 발송하는 것입니다.

      앞의 for 구문에 등장하는 squeue에 대해서는 Slurm을 참고해 주세요. 모르셔도 알림에 지장은 없습니다.


      단계 4: Crontab을 사용하여 주기적으로 스크립트 실행

      에러가 발생하면 스크립트가 실행되고 슬랙으로 알림이 보내질 것입니다. 이제 스크립트를 주기적으로 실행하려면 크론탭을 사용하세요.

      1. crontab -e 명령어로 크론탭 편집기를 엽니다.

      2. 아래와 같이 스크립트를 주기적으로 실행할 시간을 지정합니다. 예를 들어, 매시 정각마다 스크립트를 실행하려면 다음과 같이 설정할 수 있습니다:

      0 * * * * /bin/bash /path/to/your/script.sh
      1. 변경 사항을 저장하고 편집기를 종료합니다.

      2. 설정이 잘 되었는지 crontab -l 명령어로 확인합니다.

      3. 이제 크론탭이 설정된 주기에 따라 스크립트가 실행되며, 에러가 발생하면 슬랙으로 알림이 전송됩니다.

      크론탭에서는 모든 명령을 절대경로로 작성해야 합니다.

      크론탭에서 실행하는 스크립트 파일에서도 마찬가지입니다.

      크론탭의 환경은 사용자의 환경과 다를 수 있으므로 주의하십시오.


      이렇게 설정한 뒤로는 작업이 알 수 없는 이유로 중단되어도 10분 내로 알림이 오기 때문에 최대한 신속하게 대처할 수 있게 되었습니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      singleheart 님의 최신 블로그

      더보기
      동영상 기고하기