쉘스크립트, Cron으로 스크립트 자동실행시키기

뭐하시는 분이세요?·2022년 9월 5일
0

매번 빌드하고 배포하고 pm2로 올려둔 노드서버를 재시작하는건 정말 번거로운 일이다.
(내가 가진 지식으로) 매번 반복되는 이 과정을 줄일 수 없을까,, 자동화 할 수는 없을까,,, 하는 고민 끝에 도달한 결론..

바로 쉘스크립트와 크론 사용하기!

1. 배포시 사용하는 쉘 스크립트 작성

크론없이 그냥 쉘스크립트를 실행하려면 파일이 있는 위치에서 파일명을 입력하면 된다.

ex) /etc/nginx 에서 ./deploy.sh 입력

# 폴더 이동
cd /etc/nginx/myproject

# git fetch 해서 커밋 id 다른지 확인 => 새로 푸쉬된 내역이 있으면 pull 받기
sudo git fetch

local=$(git rev-parse HEAD)
remote=$(git rev-parse origin/main)

if [ $local != $remote ]
then 
	sudo git pull origin main
	sudo npm install #패키지 설치
	sudo npm run build #빌드
	sudo pm2 restart next #pm2로 올려둔 next라는 이름의 서버 재시작
	echo "Build & Deploy Success !!! ( $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S) )"
else
	echo "No Change ... ( $(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S) )"
fi

2. 크론으로 쉘스크립트 정해진 시간대에 작동시키기

2-1. 크론탭 작성

crontab -e 로 크론탭 수정용 에디터 실행

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

# 월~금 09~18시 사이에 10분간격으로 실행되게 함
# 실행할 쉘스크립트 경로 : /etc/nginx/deploy.sh
# 쉘스크립트 실행시마다 로그 쌓을 경로 : /etc/nginx/deploy.log 2>&1
*/10 09-18 * * 1-5 /etc/nginx/deploy.sh >> /etc/nginx/deploy.log 2>&1

2-2. 크론 실행

크론탭 작성 후 크론 재시작이 필요하다.

service cron restart # 크론 재시작
service cron stop # 크론 중지

crontab -l # 등록된 크론탭 목록 확인
crontab -r # 예약된 작업 삭제

하지만 인간의 욕심은 끝이없다.. gitlab에서 이미 ci/cd 툴을 제공하고 있던데..
다음은 그걸 도입하자고 해봐야겠다!!!!!!! 😁

profile
이것저것 개발하지만 프론트엔드 개발이 제일 좋아요 👩🏻‍💻

0개의 댓글