앞에서 구현한 crawler.jar 파일을 쉘 스크립트로 만들고, crontab을 이용해 자동화를 해보려고 한다.
1) run_crawler.sh가
java -jar crawler.jar명령을 실행하고, 실행한 시각을crawling_log파일에 기록
2) crontab을 통해run_crawler.sh가 15분마다 실행되도록 구현
3) crontab을 통해 매 정각마다send_news.sh가 실행되도록 구현
#!/bin/bash
# direcotry 이동
cd /home/zoonmy
# Java 실행
java -jar ./crawler.jar 2>> /home/zoonmy/error_log
# 실행한 시각을 crawling_log 파일에 추가
if [ $? -eq 0 ]; then
echo "Crawler executed at: $(date)" >> /home/zoonmy/crawling_log
else
echo "Crawler failed at: $(date)" >> /home/zoonmy/crawling_log
fi
chmod +x run_crawler.sh
crontab -e
*/1 * * * * /home/zoonmy/run_crawler.sh
1분 마다 수행되는 것을 볼 수 있다.
URL 부분에 웹훅 url을 넣어주면 된다.[-8:] 을 통해 가장 최신 8개만 보여주도록 구현#!/bin/bash
# directory 이동
cd /home/zoonmy
# 파일 경로 설정
FILE="news.json"
LOG_FILE="send_log"
ERROR_LOG_FILE="error_log"
# JSON 파일이 존재하는지 확인
if [ ! -f "$FILE" ]; then
echo "Error: $FILE does not exist." | tee -a $ERROR_LOG_FILE
exit 1
fi
# 현재 시간을 변수에 저장
date=$(date +"%H")
# 뉴스 데이터를 JSON 문자열로 조합
news_text="현재 ${date}시 뉴스입니다.\n\n"
news_entries=$(jq -r 'to_entries | map("\(.key)\n\(.value)\n") | .[-8:] | .[]' $FILE)
formatted_text=$(echo -e "$news_text$news_entries")
# Slack 웹훅 URL
WEBHOOK_URL="{url}"
# curl로 Slack 웹훅에 데이터 전송
json_payload=$(jq -cn --arg text "$formatted_text" '{"text": $text}')
curl -X POST -H 'Content-type: application/json' --data "$json_payload" $WEBHOOK_URL 2>> $ERROR_LOG_FILE
# 전송 결과 확인
if [ $? -eq 0 ]; then
echo "News sent at: $(date)" >> $LOG_FILE
else
echo "Error sending news at: $(date)" >> $ERROR_LOG_FILE
fi
chmod +x send_news.sh
tip) crontab online simulator 사이트
- https://crontab.guru/
여기서 테스트해보면 짱편하다~!
crontab -e
# 매 15분 마다 네이버 뉴스 크롤링 수행
*/15 * * * * /home/zoonmy/cs10/cs01/mission2_crawling/run_crawler.sh
# 매 시각 정각마다 news 정보 슬랙으로 전송
0 * * * * /home/zoonmy/cs10/cs01/mission2_crawling/send_news.sh

slack webhook을
쉘스크립트 curl명령어로 보내는 것 말고, api를 사용할 수도 있다!
https://api.slack.com/messaging/webhooks