컬쥐네 다락방

작업 예약 - cron 본문

클라우드/리눅스

작업 예약 - cron

코딩하는 갱얼쥐 2022. 2. 24. 14:17

리눅스 작업 예약

단일성 예약과 반복성 예약으로 나뉜다.

 

단일성 예약 :

특정 시기에 한번 작업을 시행한다.

atd라는 서비스를 이용하는 작업. atd 서비스는 제어할 수 있는 터미널을 지정받지 못한다.

따라서 결과를 파일 저장이나 메일로 받아야한다.

출력하는 명령어를 수행하게 되면 화면에 띄울 수 없다.

출력하는 명령어의 결과를 메일로 보내오거나 라디이렉션을 이용해서 파일로 저장해야 한다.

 

at 명령어 활용

at timespec

at> 프롬포트가 나오면 해당 작업 작성 후 엔터

at> ctrl + d 를 누르면 <EOF>가 뜨면서 완료

 

at -l 또는 atq : 예약 확인

at -c 예약번호 : 작업 내용 확인

atrm 예약번호 : 작업 예약 취소

[root@localhost ~]# at 11:10
at> date
at> <EOT>
job 1 at Thu Feb 24 11:10:00 2022
[root@localhost ~]# at -l
1       Thu Feb 24 11:10:00 2022 a root
[root@localhost ~]# at -c 2022
Cannot find jobid 2022

timespec 작성 요령

at 시간 날짜 순으로 기입한다.

22년 2월 23일 오전 10시 기준, 지금으로부터 2시간 뒤 작업을 원한다면,
at now +2hour

오후 4시 작업은 
at 16:00
at 04:00 PM
at teatime
at 16:00 2/23/22    (월,일,년)
at 16:00 22-02-23
at 04:00 PM today
at teatime today

새벽 12시 작업
at 00:00
at 12:00 AM

timespec은 /usr/share/doc/at-3.1.13/timespec 을 참조하면 된다.

 

주기적 작업

주기에 맞춰 해당 작업을 수행한다.

crond 서비스를 이용하는 작업이다. (여기서 cron은 주기적 작업, d는 데몬 서비스. )

atd 서비스와 같이 제어할 수 있는 터미널을 지정받지 못해 결과를 파일 저장이나 메일로 받아야한다.

cron은 사용자 cron과 시스템 cron으로 나뉜다.

 

사용자 cron

사용자 cron은 crontab 명령어를 통해서 작업을 등록한다

crontab syntax 

crontab -e : cron 예약창 편집

crontab -l : cron 예약 확인

crontab -r : 모든 cron 예약 삭제

crontab 특정파일명 : 특정파일 안에 있는 cron 예약들을 crontab에 덮어쓰기로 등록

 

cron은 일반 사용자에게 권한이 없지만, crontab에 setuid가 설정되어 있기에 사용가능.

[root@localhost ~]# ls -dl /var/spool/cron
drwx------. 2 root root 6  4월 11  2018 /var/spool/cron
[root@localhost ~]# ls -l /bin/crontab
-rwsr-xr-x. 1 root root 57576  4월 11  2018 /bin/crontab

cron의 timespec 설정법 

분,시,일,월,요일,command :

분 (0-59), 시(0-23), 일(1-31), 월(1-12), 요일(0-7 : 0,7이 일요일을 뜻함) , command 순으로 설정

timespec으로 설정한 기간중 각 조건의 교집합에 해당하는 시간에만 실행된다.

ex) 1월 1일-3일로 설정하고 요일을 월요일만 했다면, 1일부터 3일 사이에 월요일만 실행.

특수 문자 :

* : 모두 해당한다

- : 범위

/ : 주기

, : 연속되지 않은 다수

 

다양한 timespec 사용 예시

1월 1일 새벽 12시 reboot 실행 
0 0 1 1 * reboot

12월 15일 오후 3시부터 오후 6시까지 15분마다 date
*/15 15-18 15 12(or dec) * date

매월 첫번째 월요일 오후 1시 정각에 date
0 13 1-7 * 1(or mon) date

매분 date 명령어를 datefile에 기입하시오 (이어쓰기로)
* * * * * date >> datefile

시스템 cron

cron 과 anacron으로 2가지 종류가 있다.

일반 cron은 시스템이 켜져 있는 동안에만 해당 시간의 작업을 수행하고 시스템이 다운되어 있으면 수행하지 않는다.

/etc/crontab 파일을 양식지로 사용해 /etc/cron.d/ 다른 파일 저장으로 등록한다.

기존 사용자 cron과 다른 점은 cron 예약시 사용자 계정이 들어간다.

# 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

anacron은 작업 해당 시간에 시스템이 꺼져 있어서 실행하지 못하더라도 시스템이 켜지면 일정 시간 대기 후 해당 작업을 수행한다.

/etc/anacrontab

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

 

'클라우드 > 리눅스' 카테고리의 다른 글

리눅스 | PV, VG, LV  (0) 2022.02.25
리눅스 | 시스템 디스크 / 파티션, 스왑 메모리  (0) 2022.02.24
vi 에디터 명령어  (0) 2022.02.21
파일 입출력 명령어  (0) 2022.02.18
리눅스 시스템 명령어  (0) 2022.02.16
Comments