-
# cron
시스템을 운영하다 보면 어떤 반복적인 작업이 필요한 경우가 있다.
반복적인 작업이 아니더라도 미래의 어느 시점에 어떤 작업이 수행될 수 있도록 하는 작업 예약 기능이 필요할 수도 있다.
cron은 이러한 주기적인 반복 작업이나 예약 작업을 처리해 주는 데몬 프로세스로 프로그램 이름이 cron이다.
cron은 시스템 초기화 과정에서 생성되어 /etc/crontab 파일과 /var/spool/cron 디렉터리 아래에 있는 파일들에서 작업 스케줄을 읽어 처리한다.systemctl을 사용해서 cron 데몬을 시작
12hjw@Desktop:~$ systemctl start croncs # cron 사용자 제한
cron과 관련된 작업은 주로 시스템 관리자인 root가 설정하지만, 일반 사용자도 cron을 사용할 수 있다.
cron의 사용은 시스템 부하에 큰 영향을 줄 수 있기 때문에 일반 사용자의 cron 사용을 제한할 필요가 있다.
사용자의 cron 사용 권한은 /etc/cron.allow 파일과 /etc/cron.deny 파일에 의해 제한된다.
/etc/cron.allow 파일은 cron을 사용할 수 있는 사용자의 id를 저장하고 있고,
/etc/cron.deny 파일은 cron을 사용할 수 없는 사용자의 id를 저장하고 있다.
사용자 제한 원칙
/etc/cron.allow 파일이 존재하고 /etc/cron.deny 파일이 존재하지 않으면, /etc/cron.allow 파일 안에 사용자 id가 있는 사용자만 cron을 사용할 수 있다.
/etc/cron.allow 파일이 존재하지 않고 /etc/cron.deny 파일이 존재하면, /etc/cron.deny 파일 안에 사용자 id가 없는 사용자만 cron을 사용할 수 있다.
두 파일이 모두 존재하면 /etc/cron.deny 파일에 id가 존재하지 않고, /etc/cron.allow 파일에 id가 존재하는 사용자만 cron을 사용할 수 있다.
두 파일이 모두 존재하지 않으면 시스템 설정에 따라 다르지만, 보통은 누구나 cron을 사용할 수 있다.
# crontab 파일
crontab 파일
/etc/crontab 파일은 시스템 예약 작업을 처리하기 위한 것으로 각 라인은 다음과 같은 구조로 되어 있다.
min hour day mon weekday user command
min : 분 단위 (0 ~ 59)
hour : 시간 단위 (0 ~ 23)
day : 일 단위 (0 ~ 31)
mon : 월 단위 (0 ~ 12)
weekday : 요일 단위 (0 ~ 7, 0과 7은 일요일))
user : 프로그램을 실행시킬 사용자
command : 실행시킬 명령
각 필드에는 다음과 같은 특수 문자들을 사용할 수 있다.
* : 전체를 의미한다. 예를 들어 day 필드가 ‘*’이면 ‘매일’을 뜻한다.
- : 범위를 나타낸다. 예를 들어 day 필드가 3-5이면, 3일과 4일, 5일을 나타낸다.
, : 여러 값을 나타낼 때 사용. 예를 들어 day 필드에 3,4,5가 있으면 3일과 4일, 5일을 나타낸다.
/etc/crontab은 원래 모든 예약 작업들의 정보를 저장하기 위한 목적으로 사용되었으나, 리눅스는 이를 시스템 예약 작업용으로만 사용하고, 사용자의 예약 작업은 /var/spool/cron 디렉터리를 이용한다./etc/crontab에는 시스템의 예약 작업들이 들어 있다.
123456789101112131415161718192021222324hjw@Desktop:~$ cat /etc/crontab# /etc/crontab: system-wide crontab# Unlike any other crontab you don't have to run the `crontab'# command to install the new version when you edit this file# and files in /etc/cron.d. These files also have username fields,# that none of the other crontabs do.SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# 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 executed17 * * * * root cd / && run-parts --report /etc/cron.hourly25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )#cs # /etc/crontab의 시스템 예약 작업 4종류
(1) 매시 수행할 작업
/etc/cron.hourly 디렉터리 아래의 모든 실행 파일들은 매시 17분에 자동으로 수행된다.
(2) 매일 수행할 작업
/etc/cron.daily 디렉터리 아래의 모든 실행 파일들은 매일 6시 25분에 자동으로 수행된다.
(3) 매주 수행할 작업
/etc/cron.weekly 디렉터리 아래의 모든 실행 파일들은 매주 7일째(일요일) 6시 47분에 자동으로 수행된다.
(4) 매월 수행할 작업
/etc/cron.monthly 디렉터리 아래의 모든 실행 파일들은 매월 1일 6시 52분에 자동으로 수행된다.# 일반 사용자의 예약 작업
일반적인 예약 적업은 /var/spool/cron 디렉터리 아래에 사용자 id와 같은 이름의 파일에 저장한다.
crontab 명령은 일반 사용자 예약 작업과 관련된 기능을 수행한다.
형식 crontab 기능 crontab 파일의 편집 옵션 -l : 사용자의 예약 작업 정보를 출력
-r : 사용자의 예약 작업들을 모두 삭제
-e : 사용자의 예약 작업을 편집crontab -e 명령을 실행하면 vi 에디터 화면이 나타나는데, 여기에서 예약 작업을 편집하면 된다.
이때 각 라인은 /etc/crontab 파일의 라인과는 달리 user 필드가 없다.
crontab -e로 입력할 내용은 다음과 같은 구조를 가진다.
min hour day mon weekday command
crontab -e 명령을 실행하면 vi 에디터 화면이 나타나는데, 여기에서 예약 작업을 편집하면 된다. 이때 각 라인은 /etc/crontab 파일의 라인과는 달리 user 필드가 없다.
crontab -e로 입력할 내용은 다음과 같은 구조를 가진다.
min hour day mon weekday command
1234567891011hjw@Desktop:~/work/ch7$ crontab -ecrontab: installing new crontabhjw@Desktop:~/work/ch7$ crontab -l54 * * * * date >> /home/hjw/work/ch7/aaaa54 * * * * date >> /home/hjw/work/ch7/aaaahjw@Desktop:~/work/ch7$ lsaaaa myDaemon.sh timeout whoouthjw@Desktop:~/work/ch7$ cat aaaaSat 05 Jun 2021 11:54:01 PM PDTSat 05 Jun 2021 11:54:01 PM PDTcs crontab -r 하면 작성한 예약 작업 삭제.
'Computer Science > Linux' 카테고리의 다른 글
파일 시스템 관리 (0) 2021.06.06 네트워크 설정과 관리 (0) 2021.06.05 시스템 관리 (3) (0) 2021.06.05 시스템 관리 (2) (0) 2021.06.01 시스템 프로그래밍 C.2 (0) 2021.05.28 댓글