본문 바로가기
Back/Linux

[linux] cron : 주기적 실행, 자동화, 재시작

by SIXXXX_ 2024. 2. 28.
728x90

 

프로젝트 배포 시 실행되는 도중 부하가 심하다던가, 에러가 발생하는 등의 이유로 서버가 종료될 수 있다.

err.log 파일에서 서버가 종료되었다는 로그를 확인할 수 있지만 서버가 자동으로 재시작되진 않는다.

 

이 경우, 직접 서버를 재시작 해줘야 한다.

 =서버에 접속해서 재시작 하는 방법이 번거롭기 때문에 자동으로 재시작 하는 방법

 

cron : 시간 기반 잡 스케줄러, 작업을 고정된 시간, 날짜, 간격에 주기적으로 실행할 수 있도록 스케줄링 하기 위해 사용한다.

cron 작업을 설정하는 파일을 crontab이라 한다.

cron 프로세스는 /etc/crontab 파일에 설정된 내용을 읽어서 작업을 수행한다.

crontab -e

 

-e 옵션은 crontab을 편집하는 옵션이다.

편집화면이 바로 나오지 않고 어떤 에디터를 사용할지에 대한 선택 창이 나온다.

2번을 선택하여 vim.basic을 사용한다.

***** ls-l 1>cron.log

 

자세히 보기 명령인 ls-l 의  출력이 원래 모니털로 설정이 되어 있는데 ,리다이렉션한여 cron.log 파일로 옮긴다.

 

표준 출력의 1은 생략이 가능하여 ls-l > cron.log로도 사용이 가능하다.

*****ls -l 1>>cron.log

 

***** 다섯개의 *는 매 분(0~59), 매 시간(0~23), 매 일(1~31), 매 월(1~12), 매 요일(0~7) 실행하라는 설정이다.

ex)

1****

1 **** : 매 시각 1분에 실행된다.

13***

13*** : 매일 새벽 3시 1분에 실행된다.

1 3,4 ***

새벽 3시와 4시 사이에 실행하고 싶다면 콤마(,)를 사용한다.

1 2-5 ***

새벽 2시부터 5시 사이에 실행하고 싶다면 하이픈(-)을 사용한다.

 

 

파일을 저장 후 종료한 뒤  crontab 이 등록되는 동안 기다리면 1분 뒤 cron.log 파일이 생성된다.

cat  명령어로 내부를 확인해보면 로그가 남아 있다.

rm cron.log

 cron.log 파일도 삭제한다.

 

 

2. 자동화

위의 방법을 사용하면  crontab에 직접 등록해줘야 하기 때문에 스크릡트를 작성하여 자동화하는 방법이 있다.

기존의 crontab의 내용을 crontab_new 파일에 옮긴 후에 echo 명령을 통해 *****  ls-l문자열을 crontab_new 로 리다이렉션 시킨다.

이때 >> 를 사용하면 crontab_new 에 내용이 추가된다.

echo "*****ls-l" 1>>crontab_new

 

 crontab_new  파일에 로그가 추가되면 아래 명령어로  crontab_new 파일을 crontab에 등록할 수 있다.

crontab crotab_new

기존에 만들어진 crontab_new 파일은 삭제한 후 다시 실행한다.

crontab_new 파일 내부를 살피면 

*****ls-l으로 코드가 추가되어 있어야 한다.

 

 

3. 스크립트로  cron 등록

  crontab에 내용을 추가하면 cron이 작동되어 내용이 주기적 실행이 된다.

매번 crontab에 들어가서 실행하는게 아니라 스크립트 실행시 크론탭에 자동 등록되게 설정하는 방법이 있다.

 

# 크론탭 내용을  crontab_new  파일로 옮긴다.
crontab -l 1>crontab_new

# crontab_new 파일에 echo 의 결과를 추가한다.
echo "***** /home/ubuntu/job.sh" 1>> crontab_new
 
# crontab 에  crontab_new  에 작성한 내용을 반영한다.
crontab crotab_new 
 
# crontab_new 파일을 삭제한다.
rm crontab_new

 

Reference 

- AWS 로 구현하는 CI/CD 배포 입문