반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

hann-blume

Linux - Cron / CronTab 본문

Linux

Linux - Cron / CronTab

hann-blume 2020. 3. 22. 12:38

 

 

 

Crontab 파일 정의 형식 

 

 

Cron

Linux System에서 주기적인 작업처리를 진행할 때 주로사용 된다. ( 예약 작업을 의미 )
Cron은 프로세스 예약 데몬이며, 특정시각에 지정 된 작업을 수행한다.
Crontab은 Cron에 의해 실행 될 예약 작업의 목록을 정의하는 파일을 말한다. ( CronTable )
Cron은 사용자별 예약작업을 따로 가질 수 있다
Cron작업에 대한 로그기록은 /var/log/cron에 저장 된다.
Cron 데몬 활성 후 매분 실행해야할 작업이 있는지 지속적으로 확인. 
Cron 데몬은 예약작업이 정의 된 모든 사용자의 예약작업이 함께 실행된다. 
예약작업이 수행되지 않을 경우 다음 예약 작업시간까지 대기 후 실행. 
Cron 사용자 제어 파일은 2개의 파일 중 한 개만 사용. 
Cron 사용자 제어 파일이 존재하지 않을 경우 관리자만 작업이 가능. 

 

 

# rpm -qa | grep cronie ( cron 패키지 )

cronie-1.4.11-14.el7_2.1.x86_64

 

# ps -ef | grep cron ( cron 활성화 상태 확인 )
root 1081 1 0 14:01 ? 00:00:00 /usr/sbin/crond –n

 

# ps -ef | grep cron ( cron 활성화 상태 확인 )
root 1081 1 0 14:01 ? 00:00:00 /usr/sbin/crond –n

 

# ls -l /var/spool/cron ( 사용자 별 crontab 설정 정보 저장 디렉터리 )
-rw-------. 1 root root 333 3월 2 19:48 root ( crontab 설정을 적용해야 생성된다. )

 

# ls -d /etc/cron* ( cron 관련 파일 및 디렉터리 )
/etc/cron.d /etc/cron.deny /etc/cron.monthly /etc/crontab
/etc/cron.daily /etc/cron.hourly /etc/cron.weekly

 

 

Linux crontab 명령어 기본 사용 형식

crontab -l 예약 작업 리스트 확인
crontab -e 예약 작업 편집
crontab -r 예약 작업 삭제
crontab -u [ UserName ] 특정 사용자의 예약작업 확인 및 편집

※ crontab -e 명령을 이용하여 예약작업을 정의 한다.
※ crontab 내용 입력은 vi 편집기와 사용법이 동일하다.
※ 특정 사용자 이름지정은 “root” 관리자 계정만 사용이 가능하다.

 

 

Crontab 파일 정의 형식

# cat /etc/crontab

필드 의미 범위
첫 번째 필드 “ 0 ~ 59 ”
두 번째 필드 “ 0 ~ 23 ”
세 번째 필드 “ 0 ~ 31 ”
네 번째 필드 “ 1 ~ 12 ”
다섯 번째 필드 요일 “ 0 ~ 6 [ 0(일), 6(토) ] ”
여섯 번째 필드 실제 수행 할 명령어 “ 명령어는 반드시 한줄로 입력 ”

 

 

Crontab 파일 정의 형식 (다수의 값 지정)

옵션 의미 사용 예시
“ * “ 모든 값을 의미 “ * ” : 모든 일 마다 ( 3번 필드 )
“ - " 범위 지정 “ 1-12 ” : 1월 부터 12월 ( 4번 필드 )
“ , “ 여러 개의 값 지정 “ 10,15 ” : 10시 그리고 15시 ( 2번 필드 )
“ / “ 특정 주기로 나눌 때 사용 “ */10 ” : 매 10분 마다 ( 1번 필드 )

 

 

ex1)

# mkdir ./script

# cd ./script

# vi ./cron_test1.sh

echo "Cron Test" > /root/cron.txt

 

# chmod +x ./cron_test1.sh

 

예약작업 편집(-e 옵션)

# crontab -e ( 매일 정각 19시에 cron_test1.sh 스크립트 수행 )
0 19 * * * /root/script/cron_test1.sh
crontab: installing new crontab

 

예약작업 리스트 확인(-l 옵션)
# crontab -l
0 19 * * * /root/script/cron_test1.sh

 

 

Cron 실행 결과 확인

# cat /root/cron.txtCron Test

 

# ls -l /var/spool/cron
합계 4
-rw-------. 1 root root 52 3월 2 19:02 root

 

# tail /var/log/cron
Mar 2 19:15:01 MyLinux CROND[44531]: (root) CMD (/root/script/cron_test1.sh)

 

 

 

ex2)

 

# vi ./cron_test2.sh


#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/backup“
tar -cvzpf $BACKUP_DIR/test-$DATE.tar.gz /var/log
( /var/log 디렉터리 Backup “날짜정보 포함” )
find $BACKUP_DIR/* -mtime +10 -exec rm {} \; ( 10일이 지난 Backup File 삭제 )

 

# chmod +x ./cron_test2.sh

 

# crontab -e ( 매일 정각 20시에 cron_test2.sh 스크립트 수행 )
0 20 * * * /root/script/cron_test2.sh
crontab: installing new crontab

 

# crontab -l
0 19 * * * /root/script/cron_test1.sh
0 20 * * * /root/script/cron_test2.sh

 

Cron 실행 결과 확인

# ls /backup
test-03-09-2020.tar.gz

 

# tail /var/log/cron
Mar 9 20:26:02 localhost CROND[1765]: (root) CMD (/root/script/cron_test2.sh)

 

[ 일반 사용자를 이용한 cron 설정 후 목록 확인 ]


$ crontab -u root -l
must be privileged to use -u


$ crontab -e
crontab: installing new crontab


$ crontab -l
30 15 * * 0,6 /root/script/weekend.sh


$ ls -l /var/spool/cron
ls: cannot open directory /var/spool/cron: 허가 거부

 

 

[ 관리자 계정을 이용하여 일반 사용자의 crontab 확인 ]

 

# ls -l /var/spool/cron
합계 8
-rw-------. 1 itbank itbank 39 3월 2 19:50 hann
-rw-------. 1 root root 333 3월 2 19:48 root

 

 

 

 

[ /etc/cron.deny 파일을 이용 한 사용자 제어 ]

 

사용자를 deny파일에 추가
# vi /etc/cron.deny
hann

 

일반 사용자가 corn을 사용한 제어를 못하도록 명시

$ crontab -e
You (hann) are not allowed to use this program (crontab)
See crontab(1) for more information

 

확인
$ crontab -l
You (hann) are not allowed to use this program (crontab)
See crontab(1) for more information


※ 일반 사용자 계정의 Cron 설정이 불가능해지는 것을 확인 (
작업 확인 후 다시 사용 할 수 있도록 목록에서 제거 )

 

 

 

[Crontab 삭제 및 백업]

 

먼저 crontab 백업
# crontab -l > /root/cron_back.txt

 

※ 선택 삭제가 없으므로, 삭제 젂 반드시 Backup을 진행하는 것이 좋다.

( crontab -r 명령어 입력 시 젂체 설정정보 삭제 ) 

 

백업한 것 확인
# cat /root/cron_back.txt
15 19 * * * root /root/script/cron_test1.sh

 

삭제
# crontab -r

 

확인
# crontab -l
no crontab for root

 

예약작업은 삭제했지만 내용을 백업해 두었으므로

필요하면 다시 가져와서 Cron에 등록하면 된다.

# crontab cron_back.txt
# crontab -l
15 19 * * * root /root/script/cron_test1.sh

 

 

 

 

 

 

여기까지 Cron / CronTab 에 대한 설명이 끝났다.

반응형

'Linux' 카테고리의 다른 글

Linux - DNS (Domain Name Server)  (0) 2020.03.22
Linux - ShellScript  (0) 2020.03.22
Linux - Backup  (0) 2020.03.22
Linux - Samba  (0) 2020.03.21
Linux - NFS (Network File System)  (0) 2020.03.21