Linux_ServerAdmin (11) 스케줄링 관리
at 명령어
crontab 명령어
정기적인 작업을 수행하는 경우(EX: 스케줄링)
(예) 한루에 한번씩 풀 백업(Full Backup)
특정한 시간때에 한번 작업을 수행하는 경우 --> at CMD (atd)
반복적인 작업을 수행하는 경우 --> crontab CMD (crond)
1 |
at CMD |
at 데몬은 지정한 시간에 어떠한 작업이 실행될 수 있도록 작업 스케줄을 예약 처리해 주는 기능을 한다. at 스케
줄을 사용하기 위해서는 at 데몬이 작동하고 있어야 하므로, 다음과 같이 atd 데몬을 동작시킨다.
# service atd restart
Stopping atd: [ OK ] Starting atd: [ OK ] |
(명령어 형식)
# at time
Usage: at [-V] [-q x] [-f file] [-m] time at [-V] [-q x] [-f file] [-m] -t [[CC]YY]MMDDhhmm at -c job [job...] (atq | at -l) [-V] [-q x] (atrm | at -d | at -r) [-V] [-q x] job ... batch [-V] [-f file] [-m] |
(명령어 사용예)
■ 작업 선언
# at 1300
# at 10:00pm today
# at now +1 mins
■ 작업 확인
# at -l
# atq
■ 작업 취소
# atrm N (N : Job ID)
# at -r N
[EX1] at 명령어 간단한 테스트
[TERM1] 관리자 모니터링 윈도우 1
# tty
/dev/pts/3 |
[TERM2] 관리자 명령어 윈도우 2
# date
Sat Mar 8 13:51:45 KST 2014 |
# at 1300 (13시 00분)
at> echo hello > /dev/pts/3 at> <CTRL + D> <----- '<CTRL + D>' 입력 job 1 at 2014-03-09 13:53 |
# at -l
1 2014-03-09 13:53 a root |
# atq
1 2014-03-09 13:53 a root |
# at 1400 (14시 00분)
at> echo at> <CTRL + D> <----- '<CTRL + D>' 입력 job 2 at 2014-03-08 14:00 |
# at 1500 (15시 00분)
at> echo at> <CTRL + D> <----- '<CTRL + D>' 입력 job 3 at 2014-03-08 15:00 |
# at -l (# atq)
3 2014-03-08 15:00 a root 2 2014-03-08 14:00 a root |
# atrm 2
# at -r 3
# at -l
#
-> 출력된 내용이 없음(2번 작업은 실행되었고, 3번 작업은 삭제 되었다.)
■ at 명령어 사용자 제한
at 데몬을 사용할 수 있는 사용자를 제한할 수 있는 방법이 있다. /etc/at.allow 파일과 /etc/at.deny 파일을 이용
하여 at을 사용할 수 있는 사용자들을 지정한다.
at.deny 파일만 존재하면, at.deny 파일에 존재하는 사용자는 at 명령어를 수행할 수 없고, at.deny 파일에 존재하지 않는 모든 사용자는 at 명령어를 수행할 수 있다.
at.allow 파일이 존재하면, at.allow 파일에 존재하는 사용자만 at 명령어를 수행할 수 있다. at.allow 파일이존재하면, at.deny 파일은 보지 않는다.
The /etc/at.allow and /etc/at.deny files determine which user can submit
commands for later execution via at(1) or batch(1).
The format of the files is a list of usernames, one on each line. Whitespace is not permitted.
The superuser may always use at.
If the file /etc/at.allow exists, only usernames mentioned in it are
allowed to use at.
If /etc/at.allow does not exist, /etc/at.deny is checked.
[EX] at 명령어 사용자 제한
① 기본 사항 점검
# ls -l /etc/at.*
-rw------- 1 root root 1 Jan 27 2010 /etc/at.deny |
# cat /etc/at.deny
#
-> (설명) at.allow 파일이 없고, at.deny 파일만 존재하는 경우에는 at.deny 파일에 등록된 사용자만 at 명령어를
수행할 수 없다.
-> at.deny 파일에 기본적으로 사용자 등록이 없기 때문에 at 명령어 사용에 대한 거부할 사용자가 없어서, 모든
사용자가 at 명령어를 사용할 수 있는 설정이다.
② /etc/at.allow 파일 생성
# vi /etc/at.allow
user01 user02 |
-> (설명) at.allow 파일이 존재하는 경우, at.allow 파일에 등록된 사용자만 at 명령어 수행이 가능하고, 등록되
지 않은 모든 사용자는 사용할 수 없다.
③ user01 사용자로 테스트
# su - user01
$ at 1300
at> echo at> <EOT> <---- <CTRL + D> 입력 job 4 at 2010-03-02 13:00 |
$ at -l
1 2014-04-05 13:00 a user01 |
④ user03 사용자로 테스트
$ su - user03
4 2014-04-05 13:00 a user01 |
$ id
uid=502(user03) gid=502(user03) groups=502(user03) |
$ at 1300
You do not have permission to use at. |
$ exit
$ exit
#
(복원) /etc/at.allow 파일을 삭제한다.
# rm -f /etc/at.allow
2 |
crontab CMD |
cron 데몬은 같은 작업을 주기적으로 반복 실행되도록 하는 작업 스케줄용 데몬으로, 매분, 매시, 매일, 매주, 매월, 매요일 단위로 cron 데몬에 의해서 작업이 실행될 수 있다. /etc 디렉토리에 보면 시, 일, 주, 월, 요일 단위 형태로 cron 디렉토리가 존재하며, 이들 디렉토리에는 작업 예약 스크립트들이 들어 있다. /etc/cron/daily 디렉토리안에는 여러 가지 스크립트들이 존재하는데, 매일 이들 스크립트는 cron 데몬에 의해서 자동적으로 실행된다.
(cron 데몬실행)
cron으로 작업 스케줄을 예약하기 위해서는 crond 데몬을 작동시켜야 하는데 다음과 같이 데몬을 재실행해 주면 된
다. 이 작동하고 있어야 한다. 그러므로, 작업 스케줄을 예약하기 전에 항상 crond 데몬이 작동될 수 있도록 다음과 같이 처리한다.
# service crond restart
Stopping crond: [ OK ] Starting crond: [ OK ] |
(명령어 형식)
# crontab [-u user] file
# crontab [-u user] [ -e | -l | -r ]
-e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) -s (selinux context) |
(명령어 사용예)
■ 작업 선언
# crontab -e (-e : Edit, # vi /var/spool/cron/<사용자이름>)
# crontab -e -u user01
■ 작업 확인
# crontab -l (-l : List, # cat /var/spool/cron/<사용자이름>)
■ 작업 삭제
# crontab -r (주의) (-r : Remove, # rm /var/spool/cron/<사용자이름>)
[EX] crontab -e/-l/-r 명령어 형식 확인
# cd /var/spool/cron
# ls
#
# crontab -e
* * * * * date >> /tmp/date.log |
# crontab -l
-> 내용 확인
# cat root
-> 내용 확인
# crontab -r
# ls
-> 파일 삭제 된것 확인
[EX] crontab 파일 분석
# crontab -l
분 시 일 월 요일 CMD
0 3 * * * /root/bin/backup.sh |
(분) 0 - 59
(시) 0 - 23
(일) 1 - 31
(월) 1 - 12
(요일) 0 - 7 (0,7: 일요일, 1: 월요일, 2: 화요일)
0
1,2,3
1-3
*
(crontab 파일의 형식)
crontab 파일은 5개의 시간 필드(분/시/일/월/요일)와 한 개의 명령어 필드(명령어/스크립트)로 구성되어 있다.
각 필드는 공백문자(White Space)를 통해 구분이 된다.
“분”자리에는 0분 ~ 59분까지 올 수 있다.
“시”자리에는 0시 ~ 23시까지 올 수 있다.
“일”자리에는 1일 ~ 31일까지 올 수 있다.
“요일”자리에는 1월 ~ 12월까지 올 수 있다.
(실무적인 예제) /root/bin/backup.sh
분 시 일 월 요일 CMD
--------------------------------------------
0 3 * * * /root/bin/backup.sh (하루에 한번씩)
0 0,12 * * * /root/bin/backup.sh (하루에 두번씩)
0 3 * * 0 /root/bin/backup.sh (일주일에 한번씩)
0 3 * * 1,3 /root/bin/backup.sh (일주일에 두번씩)
0 3 1 * * /root/bin/backup.sh (한달에 한번씩)
0 3 1,15 * * /root/bin/backup.sh (한달에 두번씩)
0 3 1 3,6,9,12 * /root/bin/backup.sh (분기에 한번씩)
--------------------------------------------
0 3 1 * 0 /root/bin/backup.sh (매달 1일 3시 정각 + 매주 일요일)
--------------------------------------------
(목표) 매달 첫번째 일요일날 /root/bin/backup.sh 프로그램을 동작시킨다.
=> crontab + script.sh
# crontab -l
0 3 * * 0 /root/bin/backup.sh
# cal
August 2015
Su Mo Tu We Th Fr Sa
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
# vi script.sh
----------------------------------
...... (중략) ....
DAY=`date +%d`
if [ $DAY -le 7 ] ; then
/root/bin/backup.sh
fi
...... (중략) ....
-----------------------------------
[EX1] at 명령어의 실무예(백업 스크립트 실행)
# cat /root/bin/backup.sh
--------------------------------------------
(백업 스크립트 내용 예제)
cd /home
tar cvzf /backup/home.`date +%m%d`.tar.gz .
--------------------------------------------
(현재) # /root/bin/backup.sh
(지정된 시간) # echo /root/bin/backup.sh | at 1200
# vi /root/bin/backup.sh
#!/bin/bash
cd /home tar cvzf /backup/home.`date +%m%d_%H%M%S`.tar.gz . > /backup/backup.log 2>&1 |
# chmod 755 /root/bin/backup.sh
# ls -ld /home
# ls -ld /backup (# mkdir -p /backup)
# crontab -e
* * * * * /root/bin/backup.sh |
# cd /backup
# watch ls (# watch CMD)
.....
home.0827_135101.tar.gz
home.0827_135201.tar.gz
home.0827_135301.tar.gz
home.0827_135401.tar.gz
.....
# crontab -e
-> 새로 추가된 라인 삭제
[EX2] 업그레이드 수행 후 재부팅하는 경우
[TERM1] 업데이트 터미널
# yum -y update
.... 업데이트 수행 중 ......
.... 남은 작업 시간 예상 : 10분 ......
[TERM2] 재부팅 명령어 수행 터미널
# at now +30 mins (# echo "shutdown -r now" | at now +30 mins)
--------------------------------
at> shutdown -r now
at> <CTRL + D>
--------------------------------
[EX3] crontab 명령어의 기본 사용법(쉬는 시간 표시)
# mkdir /etc/MESS
# scp 172.16.9.252:/root/shell/CoffeeTime.txt /etc/MESS
# cat /etc/MESS/CoffeeTime.txt
# crontab -e
분 시 일 월 요일 CMD
50 10-18 * * 6,7 wall < /etc/MESS/CoffeeTime.txt |
or
50 10-16 * * 1-5 wall < /etc/MESS/CoffeeTime.txt |
[EX4] DB 사용자로 로그인/백업
# crontab -e
01 04 * * * /root/bin/DB_backup.sh |
# vi /root/bin/DB_backup.sh
#!/bin/bash
sqlplus /as sysdba << EOF CMD ; CMD ; CMD ; EOF |
[EX5] 수업 종료 후 서버 Power OFF
(Linux) # echo "/sbin/poweroff" | at now +5 minutes /* 5분 뒤에 리눅스 서버 종료 */
# at -r <N>
(Window) C:\> shutdown /s /t 600 /* 10분 뒤에 윈도우 서버 종료 */
C:\> shutdown /a /* shutdown 취소 */
'Learning > └Essential & Admin' 카테고리의 다른 글
문서정리 Linux_Essential (0) | 2016.11.05 |
---|---|
Linux_ServerAdmin (12) 백업 과 복구 (0) | 2016.11.04 |
Linux_ServerAdmin (10) 사용자 그룹관리 (0) | 2016.11.04 |
Linux_ServerAdmin (9) 리눅스 부팅과정 (0) | 2016.11.04 |