상세 컨텐츠

본문 제목

[Linux] CRON을 활용하여 반복 작업 관리하기

내용 기록/Linux

by 오늘의 예지 2023. 5. 1. 19:34

본문

728x90

오늘은 반복 작업을 관리할 수 있는 CRON 데몬에 대해서 알아보자.


CRON이란?

리눅스에서는 일반적으로 cron 데몬이 주기적인 작업 실행을 처리한다.

cron의 설정 파일은 cron table을 줄여서 "crontab"이라 부른다.

 

 

cron이 참조하는 crontab 파일 위치

1. /var/spool/cron
시스템 개별 사용자를 위한 crontab 파일 위치이며 일반적으로 root 계정용 하나와 계정 사용자당 1개의 파일을 가진다.
파일명은 사용자의 계정명이며 cron은 이 이름을 바탕으로 각 설정 파일에 지정된 작업들을 실행할 때 사용할 UID를 결정한다.  
이 곳에 있는 설정파일들은 crontab 명령으로 관리한다.

 

2. /etc/cron.d
소프트웨어 패키지를 설치할 때 필요한 주기적인 작업을 등록하는 공간으로 사용한다.  
임의의 사용자 권한으로 실행할 수 있다.

 

3. /etc/crontab
관리자가 직접 지정한 작업들을 설정하며, 임의의 사용자 권한으로 실행할 수 있다.  
시스템 관련 작업들을 등록해 사용하는 곳이다.

 

cron 프로세스 실행 확인

ps -ef | grep crond
root      1214     1  0 14:22 ?        00:00:00 crond

cron은 작동 시 모든 설정 파일을 읽어 메모리에 저장해두고 휴지 상태에 들어간다.
그리고 나서 매분마다 활성화돼 변경된 crontab 파일들이 있는지 확인하고 파일이 변경된 경우 설정을 다시 읽어 저장하고, 실행해야 할 작업이 있는지 확인하고 실행시킨 후 다시 휴지 상태로 들어간다.  

 

 

crontab 사용법

crontab 명령어를 사용하여 작성하는 cron은 개별 사용자용 cron이다.

해당 명령의 파일 정보는 '/var/spool/cron' 아래에 저장된다.

 

1. crontab 명령어

crontab [-u 사용자명] { -l | -r | -e}
crontab -l
→ 예약된 작업리스트
crontab -e
→ 예약된 작업 수정
crontab -r
→ 예약된 작업 삭제

crontab -u 사용자명
→ 루트는 해당 사용자의 crontab 파일을 보거나 삭제, 편집 가능

 

2. 등록 내용 설정

분,시,일,월,요일,[사용자명] 실행명령 순으로 설정

- * : 범위 내 모든 경우

- 숫자 : 정확히 일치하는 그 시각, 날짜

- '-' 기호로 연결된 두 숫자 : 두 숫자 사이에 포함된 범위를 뜻함

- 콤마(,)로 구분돼 나열된 숫자 : 나열된 숫자 중 일치하는 경우를 뜻함

 

  • crontab 파일 형식
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 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
첫번째 줄: 분 0-59
두번째 줄: 시 0-23
세번째 줄: 일 0-31
네번째 줄: 월 1-12
다섯번째 줄: 요일 0-7 (0 또는 7=일요일, 1=월요일, 2=화요일,...)
여섯번째 줄: 사용자명 /etc/crontab, /etc/cron.d 에 저장될 경우 필요
일곱번째 줄: 실행할 명령을 한줄로 작성

 

 

cron 설정 예시

45,5 10 * * 1-5 root /usr/bin/rdate -s time.bora.net && clock -w
→ 월~금요일에 매월 매일 10시 5분과 45분에 루트권한으로 시간동기화 명령어 실행

* * * * * /root/every_1min.sh
→ 1분마다 /root/every_1min.sh 실행(하루에 1440회)

15,45 * * * * /root/every_30min.sh
→ 매시 15분, 45분에 /root/every_30min.sh 실행(하루에 48회)

*/10 * * * * /root/every_10min.sh
→ 10분마다 /root/every_10min.sh 실행(하루에 144회)

0 2 * * * /root/backup.sh
→ 매일 02:00에/root/backup.sh 실행(하루에 1회)

30 */6 * * * /root/every_6hours.sh
→ 6시간마다 /root/every_6hours.sh 실행(00:30, 06:30, 12:30, 18:30)

30 1-23/6 * * * /root/every_6hours.sh
→ 1시부터 6시간마다 /root/every_6hours.sh 파일 실행(01:30, 07:30, 13:30, 19:30)

0 8 * * 1-5 /root/weekday.sh
→ 평일(월요일~금요일) 08:00에 /root/weekday.sh 파일 실행

0 8 * * 0,6 /root/weekend.sh
→ 주말(일요일, 토요일) 08:00에 /root/weekend.sh 파일 실행

 

 

 

cron의 사용자 제어

/etc/cron.deny와 /etc/cron.allow 설정파일에서 사용자에 대한 crontab 제어를 관리할 수 있다.

 

1. /etc/cron.allow

이 허용파일이 있는 경우 파일 내 지정된 사용자만 crontab을 등록할 수 있다.

지정되지 않은 사용자들은 crontab 명령을 실행할 수 없다.

 

2. /etc/cron.deny

허용파일이 없는 경우에는 이 거부 파일이 사용된다.

파일 내 지정된 사람을 제외한 나머지 사용자에게 crontab 명령 실행 권한이 주어진다.

 

3. 두 파일 모두 존재하지 않는다면

두 파일 모두 존재하지 않는 경우에는 대부분 루트 관리자에게만 크론 권한이 있다.

데비안과 우분투 배포판에서는 이런 경우 모든 사용자에게 실행 권한을 준다.

 

 

이것으로 CRON 내용 정리를 마친다.

 

 

 

 

이 글을 읽어주신 모든 분들이 오늘도 좋은 하루 되시길😊

728x90

관련글 더보기

댓글 영역