23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
업무상 리눅스 서버에서 긴 작업을 실행할 때가 많습니다. 짧게는 몇 시간에서 길게는 몇 주에 걸쳐 실행하는데요,
가끔 서버에 오류가 발생하거나 코드의 버그로 작업이 중단될 때가 있습니다. 그러면 확인하고 문제를 수정해서 작업을 재실행해야 하는데요,
평일 일과시간에는 수동으로 확인할 수도 있지만 이동중이거나 서버에 접속할 수 없는 상황이라면 문제가 발생했다는 것 자체를 모르겠죠.
이런 경우에 문제를 감지해서 슬랙으로 알림을 보내는 방법을 설명합니다.
슬랙의 Apps에서 Incoming WebHooks 앱을 찾아서 Add를 선택합니다
Add to Slack 버튼을 누릅니다
메시지를 받을 채널을 선택하고 Add Incoming WebHooks integration을 누릅니다
결과 페이지에서 Webhook URL을 복사합니다
아래의 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"작업이 중단되는 데에는 다양한 원인이 있습니다.
제가 사용하는 시스템의 경우 기계 고장인 경우도 있었지만, 뚜렷한 원인이 없이 작업이 멈춰있는 경우도 있었습니다.
저희는 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을 참고해 주세요. 모르셔도 알림에 지장은 없습니다.
에러가 발생하면 스크립트가 실행되고 슬랙으로 알림이 보내질 것입니다. 이제 스크립트를 주기적으로 실행하려면 크론탭을 사용하세요.
crontab -e 명령어로 크론탭 편집기를 엽니다.
아래와 같이 스크립트를 주기적으로 실행할 시간을 지정합니다. 예를 들어, 매시 정각마다 스크립트를 실행하려면 다음과 같이 설정할 수 있습니다:
0 * * * * /bin/bash /path/to/your/script.sh변경 사항을 저장하고 편집기를 종료합니다.
설정이 잘 되었는지 crontab -l 명령어로 확인합니다.
이제 크론탭이 설정된 주기에 따라 스크립트가 실행되며, 에러가 발생하면 슬랙으로 알림이 전송됩니다.
크론탭에서는 모든 명령을 절대경로로 작성해야 합니다.
크론탭에서 실행하는 스크립트 파일에서도 마찬가지입니다.
크론탭의 환경은 사용자의 환경과 다를 수 있으므로 주의하십시오.
이렇게 설정한 뒤로는 작업이 알 수 없는 이유로 중단되어도 10분 내로 알림이 오기 때문에 최대한 신속하게 대처할 수 있게 되었습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.