사이트 가용성 확인 및 작업 자동화를 위한 간단한 bash 스크립트 작성 (cron
사용)
1. 과제 설정
오늘은, 사이트 접근 가능 여부를 확인하고 결과를 로그 파일에 기록하는 실제 스크립트를 작성한 후, cron
을 사용해 실행을 자동화할 거야.
우리가 무엇을 할 건가?
우리는 다음과 같은 bash 스크립트를 만들 거야:
ping
을 사용해 지정된 사이트의 접근 가능 여부를 확인하는 것.- 검사 결과를 시간과 날짜를 포함하여 로그 파일에 기록하는 것.
cron
을 통해 5분마다 이 스크립트를 자동으로 실행하게 설정하는 것.
왜 이게 중요할까?
실제 세계에서 웹사이트와 서버의 접근 가능 여부를 모니터링하는 것은 시스템 관리자들에게 중요한 과제 중 하나야. 예를 들어, 네 사이트(또는 서버)가 갑자기 응답하지 않게 되면 최대한 빨리 그 사실을 알아야겠지. 이런 시나리오는 모니터링뿐만 아니라 면접이나 실제 업무에서도 유용하게 활용될 수 있어.
2. 1단계: 간단한 bash 스크립트 작성
우선 기본적인 bash 스크립트를 작성해 보자. 스크립트가 하는 작업을 단계별로 설명할게:
- 확인할 웹사이트 주소를 지정해줄 거야.
ping
을 사용해서 서버에 요청을 보내보자.- 응답이 제대로 오는지 확인해볼 거야.
- 결과를 로그 파일에 저장하자.
먼저 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
코드 설명:
#!/bin/bash
— 이 스크립트가 Bash를 사용해서 실행되어야 한다는 것을 지정해.WEBSITE="example.com"
— 확인하려는 웹사이트 주소야.example.com
을 네가 모니터링하려는 다른 웹사이트나 서버로 바꿔도 돼.ping -c 1 $WEBSITE
— 지정된 사이트로 하나의 (-c 1
) 패킷을 보낸다. 사이트가 응답하면 명령은 0으로 종료되고, 그렇지 않으면 에러와 함께 종료돼.&> /dev/null
— 표준 출력과 에러를 "블랙홀"로 리다이렉트한다 (ping
출력이 콘솔에 나타나는 걸 원하지 않아).$(date)
— 현재 날짜와 시간을 메시지에 추가해줘.>> $LOG_FILE
— 결과를 로그 파일 끝에 추가한다.
3. 단계 2: 스크립트 수동 실행
스크립트 실행을 자동화하기 전에, 제대로 작동하는지 확인해 보자.
스크립트를
site_check.sh
파일에 저장해.스크립트를 실행 가능하도록 변경해:
chmod +x site_check.sh
실행해:
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. 일반적인 질문 및 오류 분석
핑에서 'Permission denied' 오류가 반환됨
보통 사용자로 스크립트를 실행하면 권한이 부족할 수 있어.
sudo
로 스크립트를 실행하거나 실행 권한을 추가해줘.로그 파일이 생성되지 않음
로그 파일 경로 (
/var/log/site_status.log
)가 올바르게 지정되었는지 확인하고, 사용자가 해당 디렉터리에 쓰기 권한이 있는지 확인해. 파일이 없으면 수동으로 만들어봐:sudo touch /var/log/site_status.log sudo chmod 666 /var/log/site_status.log
cron
이 스크립트를 실행하지 않음cron
서비스가 작동 중인지 확인해:sudo systemctl status cron
상태가
active (running)
이어야 해. 멈춰 있다면 실행시켜:sudo systemctl start cron
스크립트가 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 엔지니어나 시스템 관리자에게 특히 유용할 거야.
GO TO FULL VERSION