CodeGym /행동 /Docker SELF /사이트 가용성 확인 및 cron을 사용한 작업 자동화를 위한 간단한 bash 스크립트 작성

사이트 가용성 확인 및 cron을 사용한 작업 자동화를 위한 간단한 bash 스크립트 작성

Docker SELF
레벨 3 , 레슨 6
사용 가능

1. 과제 설정

오늘은, 사이트 접근 가능 여부를 확인하고 결과를 로그 파일에 기록하는 실제 스크립트를 작성한 후, cron을 사용해 실행을 자동화할 거야.

우리가 무엇을 할 건가?

우리는 다음과 같은 bash 스크립트를 만들 거야:

  1. ping을 사용해 지정된 사이트의 접근 가능 여부를 확인하는 것.
  2. 검사 결과를 시간과 날짜를 포함하여 로그 파일에 기록하는 것.
  3. cron을 통해 5분마다 이 스크립트를 자동으로 실행하게 설정하는 것.

왜 이게 중요할까?

실제 세계에서 웹사이트와 서버의 접근 가능 여부를 모니터링하는 것은 시스템 관리자들에게 중요한 과제 중 하나야. 예를 들어, 네 사이트(또는 서버)가 갑자기 응답하지 않게 되면 최대한 빨리 그 사실을 알아야겠지. 이런 시나리오는 모니터링뿐만 아니라 면접이나 실제 업무에서도 유용하게 활용될 수 있어.


2. 1단계: 간단한 bash 스크립트 작성

우선 기본적인 bash 스크립트를 작성해 보자. 스크립트가 하는 작업을 단계별로 설명할게:

  1. 확인할 웹사이트 주소를 지정해줄 거야.
  2. ping을 사용해서 서버에 요청을 보내보자.
  3. 응답이 제대로 오는지 확인해볼 거야.
  4. 결과를 로그 파일에 저장하자.

먼저 site_check.sh라는 파일을 만들어 보자:

#!/bin/bash

# 웹사이트 주소 정의
WEBSITE="example.com"

# 결과를 기록할 로그 파일
LOG_FILE="/var/log/site_status.log"

# ping을 사용하여 사이트 가용성 확인
if ping -c 1 $WEBSITE &> /dev/null; then
    # 사이트가 접근 가능한 경우
    echo "$(date): $WEBSITE is reachable" >> $LOG_FILE
else
    # 사이트가 접근 불가능한 경우
    echo "$(date): $WEBSITE is unreachable" >> $LOG_FILE
fi

코드 설명:

  1. #!/bin/bash — 이 스크립트가 Bash를 사용해서 실행되어야 한다는 것을 지정해.
  2. WEBSITE="example.com" — 확인하려는 웹사이트 주소야. example.com을 네가 모니터링하려는 다른 웹사이트나 서버로 바꿔도 돼.
  3. ping -c 1 $WEBSITE — 지정된 사이트로 하나의 (-c 1) 패킷을 보낸다. 사이트가 응답하면 명령은 0으로 종료되고, 그렇지 않으면 에러와 함께 종료돼.
  4. &> /dev/null — 표준 출력과 에러를 "블랙홀"로 리다이렉트한다 (ping 출력이 콘솔에 나타나는 걸 원하지 않아).
  5. $(date) — 현재 날짜와 시간을 메시지에 추가해줘.
  6. >> $LOG_FILE — 결과를 로그 파일 끝에 추가한다.

3. 단계 2: 스크립트 수동 실행

스크립트 실행을 자동화하기 전에, 제대로 작동하는지 확인해 보자.

  1. 스크립트를 site_check.sh 파일에 저장해.

  2. 스크립트를 실행 가능하도록 변경해:

    chmod +x site_check.sh
    
  3. 실행해:

    sudo ./site_check.sh
    

스크립트를 실행한 후, /var/log/site_status.log 파일을 열어서 체크 결과가 로그에 추가되었는지 확인해. 다음 명령어를 사용해봐:

cat /var/log/site_status.log

모든 것이 잘 작동하면, 다음과 같은 줄을 볼 수 있을 거야:

Mon Oct 30 14:35:22 UTC 2023: example.com is reachable

4. 3단계: cron을 사용한 자동 실행 설정

우리는 이미 cron이 작업을 일정에 따라 실행할 수 있게 한다는 것을 알고 있어. 이제 cron을 설정해서 스크립트가 5분마다 실행되도록 해볼 거야.

crontab 편집

crontab 편집기를 여는 방법:

crontab -e

다음 줄을 추가해:

*/5 * * * * /path/to/site_check.sh

설명:

  • */5 — 작업이 5분마다 실행되어야 함을 나타냄.
  • /path/to/site_check.sh — 스크립트의 전체 경로. 경로가 올바른지 확인해야 해. 예를 들어, 스크립트가 사용자 홈 디렉토리에 있다면 경로는 /home/your_username/site_check.sh와 같을 거야.

변경사항을 저장한 후 cron은 5분마다 스크립트를 실행할 거야. 작업이 추가되었는지 확인하려면 다음 명령을 실행해:

crontab -l

5. 4단계: cron 동작 확인

이제 자동화가 제대로 동작하는지 확인해 보자. 5-10분 정도 기다린 후 로그 파일을 다시 열어보면 돼:

cat /var/log/site_status.log

5분마다 새로운 기록이 업데이트되는 걸 볼 수 있어야 해. 예를 들어:

Mon Oct 30 14:35:22 UTC 2023: example.com에 접근 가능
Mon Oct 30 14:40:22 UTC 2023: example.com에 접근 가능
Mon Oct 30 14:45:22 UTC 2023: example.com에 접근 가능

6. 일반적인 질문 및 오류 분석

  1. 핑에서 'Permission denied' 오류가 반환됨

    보통 사용자로 스크립트를 실행하면 권한이 부족할 수 있어. sudo로 스크립트를 실행하거나 실행 권한을 추가해줘.

  2. 로그 파일이 생성되지 않음

    로그 파일 경로 (/var/log/site_status.log)가 올바르게 지정되었는지 확인하고, 사용자가 해당 디렉터리에 쓰기 권한이 있는지 확인해. 파일이 없으면 수동으로 만들어봐:

    sudo touch /var/log/site_status.log
    sudo chmod 666 /var/log/site_status.log
    
  3. cron이 스크립트를 실행하지 않음

    cron 서비스가 작동 중인지 확인해:

    sudo systemctl status cron
    

    상태가 active (running)이어야 해. 멈춰 있다면 실행시켜:

    sudo systemctl start cron
    
  4. 스크립트가 cron에서 실행되지 않지만, 수동으로는 작동함

    스크립트와 사용 중인 모든 파일의 경로를 완전히 명시했는지 확인해. cron 작업의 환경 변수 (예: $PATH)는 다를 수 있어. 절대 경로 사용이 좋아.


7. 개선 및 추가 과제

웹사이트 필터링

스크립트를 확장해서 여러 웹사이트의 가용성을 확인하도록 만들어보자. 예를 들어:

WEBSITES=("example.com" "google.com" "stackoverflow.com")
for SITE in ${WEBSITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$(date): $SITE is reachable" >> $LOG_FILE
    else
        echo "$(date): $SITE is unreachable" >> $LOG_FILE
    fi
done

알림 보내기

웹사이트가 가용하지 않을 때 알림을 추가해 보자. 예를 들어 mail 명령을 사용해 이메일을 보내는 방식:

# 이메일 알림
if ! ping -c 1 $WEBSITE &> /dev/null; then
    echo "$WEBSITE is down!" | mail -s "Website Check Alert" your_email@example.com
fi

로그 파일 순환

로그 파일 크기를 1MB로 제한해보자. 파일이 너무 커지면 이름을 바꿔(아카이브로 저장) 새로운 로그를 시작한다.


축하해! 이제 bash 스크립트와 cron을 사용해서 실제 작업을 자동화할 수 있게 되었어. 이 기술은 DevOps 엔지니어나 시스템 관리자에게 특히 유용할 거야.

1
설문조사/퀴즈
리눅스 서비스, 레벨 3, 레슨 6
사용 불가능
리눅스 서비스
리눅스 서비스
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION