프로그래밍/devops

crond, crontab활용

브래드 킴 2022. 12. 25. 21:19
728x90

cron은 주기적으로 반복적인 작업을 리눅스에서 스케쥴링을 미리 지정하여 자동으로 실행되도록 하는 프로세스이다. 크론을 통해 db나 파일의 주기적인 백업, 패치작업, 파일용량 수시로 체크 등의 작업을 자동으로 수행할 수가 있다.

cron의 데몬 프로세스 이름은 crond 이다.(데몬이 무엇인지는 여기 글 참고.) crond 데몬은 기본적으로 매분 마다 실행이 되면서, crontab파일을 스크리닝한다.

anacrontab에 대한 내용도 알필요는 있으나, 여기서는 실질적으로 개발자들이 많이 활용하는 crontab을 자세히 알아보고자 한다.

먼저 리눅스에서 /etc/ 로 이동하여 ls -al 해보면 아래와 같은 폴더와 파일들이 있는 것을 알 수 있다.


이중 crontab 파일을 vi를 통해 열어 보면 아래와 같은 guide가 적혀 있는 것을 알수가 있다.

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

(리눅스마다 위치도 상이할수 있고, crontab파일의 deafult 설정이 다를수 있다는 점 참고)

매 시 15분
최초에 crontab파일에는 아무것도 설정이 되어 있지 않을 수도 있고 default 설정이 되어 있을수도 있다. 예를 들어, crontab파일에 아래와 같이 적혀 있었다고 가정 해보자.

15 * * * * root run-parts /etc/cron.hourly

위와 같이 crontab 파일에 적혀있게 되면, 매시 15분마다 cron.houly폴더의 모든 스크르립트를 실행하게 된다. 1시 15분 -> 2시 15분 -> 3시 15분 을 말하는 것이다.

여기서 root는 계정을 말하는 것이고, run-parts는 모든 파일을 실행하라는 의미이다.

15분단위로
만약 아래와 같이 되어 있다면, 매시 15분이 아니라, 15분 간격으로 실행하는 설정이 되겠다.

*/15 * * * * root run-parts /etc/cron.hourly

별도의 폴더에 스크립트 생성

cron.houly, cron.daily, cron.monthly등의 폴더에 실행예정인 스크립트를 시간대에 맞게 넣어둔뒤, 위의 15분 예시와 같이 crontab에 설정을 하면 된다.

그러나, 스크립트를 새로 하나 추가하고 싶기는 한데 cron.* 폴더를 바라보고 있는 crontab, anacrontab 등 기존의 설정들이 있고 어디서 cron.*폴더를 호출해가는지 잘 파악이 되지 않을 수 있다.

그렇게 되면 중복 실행의 가능성이 존재하므로 만약 걱정이 된다면, 아래와 같은 별도의 경로를 crontab에 설정하는게 좋겠다.

* * * * * /home/ec2-user/scripts


권한 문제

맨 첫 그림으로 올라가 봐보면 crontab파일은 root계정으로 되어 있어 aws를 사용한다거나 root권한이 없는 일반사용자들은 crontab파일에 직접 수정하는데 문제가 있을 것이다. 그래서, crontab cli명령어를 통해 crontab 파일에 원하는 내용을 추가하게 된다.

crontab -l : 현재 crontab파일 추가된 내용 확인
crontab -e : crontab 파일 vi 편집모드로 진입 -> : 입력 후 수정 후 wq로 수정


(anacrontab관련)
아래 내용은 참고만 하도록 하자.

사실은 crond 데몬은 crontab 뿐만아니라, /etc/anacrontab 파일도 screening을 하여 anacrontab파일안에 적혀 있는 스케쥴도 실행을 하게 된다. 다만 사용하는 문법이 아래와 같이 다소 다르니, 필요하다면 검색을 통해 참고하도록 하자.

vi /etc/anacrontab




728x90