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

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

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

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

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