1. at 데몬(작업 스케쥴 예약 데몬)
2. at 데몬은 어떤 명령을 연속적으로 내려야 하는데 지금은 바쁜 경우라든지 외부에서 텔넷으로 접근해서 작업을 해야 하는데 해당 작업을 계속 하도록 하고 싶은 경우에 사용하는 작업 스케쥴 예약 데몬이며, 이 데몬은 일반적으로 root 유저만 사용이 가능하다.
3. at 데몬의 사용법
at 데몬(atd)을 사용하기 위해서는 at, atq, atrm, batch 명령에 대해서 알아야 한다.
1. at, atq, atrm
이 명령어는 실제적으로 atd 데몬에 명령어를 내리는 명령어로 명령해에는 언제 실행할 것인지 그리고 무슨 옵션으로 실행할 것인지에 대한 옵션이 있고, 명령어를 엔터를 쳐서 입력하면 커서가 한 줄 밑으로 내려가게 되는데 여기서 실행할 명령을 순서대로 하나씩 쳐서 입력한 뒤에 다 끝나면 [Ctrl]+[D] 를 눌러서 나가면 된다.
사용법 |
2. Usage: at [-V] [-q x] [-f file] [-m] time
atq [-V] [-q x] [-v]
atrm [-V] [-q x] job ...
batch [-V] [-f file] [-m]
옵션 |
3. -V : 버전을 보여준다.
-q queue : 실행할 대기큐를 정할 수 있다. 사용할 수 있는 문자는 a-z, A-Z 까지이며, a가 기본 큐이다. 특별히 b는 batch 명령에서 사용하는 큐이며 그 외에는 높은 글자를 사용할 수록 nice값을 높여서 실행하게 된다. atq로 큐를 확인할 수 있다.
-f file : 표준 입력이 아닌, 뒤에 써주는 파일에서 명령어를 읽어들인다.
-m : 실행한 결과를 메일로 통보해준다.
-l : atq를 실행하는 alias이다.
-d : atrm 을 실행하는 alias이다.
-v : 끝난 작업이지만 아직 큐에서 삭제되지 않은 작업을 적어준다.
-c : 작업 리스트를 명령행을 포함하여 표준 출력으로 보여준다.
TIME : 실행할 시간을 기록한다. 기본적으로 "hh:mm YYYY-MM-DD"로 적는다. hh:mm은 시간으로 24시간제를 기본으로 한다.
사용예 |
4. 실제 명령은 아래와 같이 "at + 실행할 시간"으로 명령을 내리면 at>라는 프롬프트가 뜨는데 여기서 부터 실제 내릴 명령을 계속적으로 써주면 된다.
[root@bluestar bin]# at 12:00 2000-03-02
at> find / -name *linux* -print
at> tee ~/linux.txt
at> < EOT> <- [EOT]는 실제는 [Ctrl]+[D]이다.
warning: commands will be executed using /bin/sh
job 1 at 2000-03-02 12:00
[root@bluestar bin]#
위에서 "at 12:00 2000-03-02"는 2000년 3월 2일에 아래에 타이핑한 명령어를 실행하라는 뜻이며, 그 다음에 내린 명령들은 가운데 'linux'라는 패턴이 들어가는 파일을 찾아서 그 결과를 ~/linux.txt 라는 파일에 저장하라는 뜻이다.
마지막으로 [Ctrl]+[D]를 눌러서 끝내게 되는데, 시스템은 커맨드를 언제 입력했는지를 보여주며 job 1에 할당되었다고 보여주고 있다.
이번에는 다른 예를 보기로 하자.
[root@bluestar bin]# at now + 2 hours
at> find / -name *.html -print
at> tee ~/html.txt
at> mount -t vfat /dev/hda1 /mnt/win98_c
at> cp ~/html.txt /mnt/win98_c/
at> < EOT>
warning: commands will be executed using /bin/sh
job 2 at 2000-03-02 13:34
[root@bluestar bin]#
위는 지금부터 2시간 후에 아래 명령들을 실행하라는 뜻이다. hours 대신에 minutes, days, week 등이 쓰일 수 있으며, 그냥 "at now" 라고 쓰면 모든 명령을 입력한 후 [Ctrl]+[D]를 입력하는 즉시 실행한다.
이러한 atd 데몬은 쉘스크립트내에서 아주 유용하게 사용되어 질 수 있는데, 만약 어떤 쉘스크립트의 마지막 부분에 "at -m -f $0 now + 3 days"라고 써주게 되면 해당 쉘스크립트를 매번 3일마다 실행하게 되며, 그 결과를 메일로도 알려주게 된다.
이제 이렇게 예약된 작업내용(큐:queue)을 보려면 at 명령에 -l 옵션을 주거나 atq 명령을 써면 된다.
[root@bluestar bin]# at -l
1 2000-03-02 12:00 a
2 2000-03-02 13:34 a
[root@bluestar bin]# atq
1 2000-03-02 12:00 a
2 2000-03-02 13:34 a
큐에 있는 작업을 지우려면 atrm 명령을 사용한다.
[root@bluestar bin]# atrm 2
[root@bluestar bin]# atq
1 2000-03-02 12:00 a <- 2번 작업이 지워졌다.
[root@bluestar bin]#
5. batch
batch 명령은 at와 사용법이 같다.
[root@bluestar bin]# batch
at> find / -name *.html -print
at> tee ~/html.txt
at> mount -t vfat /dev/hda1 /mnt/win98_c
at> cp ~/html.txt /mnt/win98_c/
at>
warning: commands will be executed using /bin/sh
job 3 at 2000-03-02 11:56
[root@bluestar bin]#
4. at 사용유저 제한
이러한 atd 데몬을 아무 유저나 마음데로 쓰게 된다면 시스템에 많은 부하가 걸릴 수가 있으므로 사용유저를 제한할 필요가 있는데 이 때 사용되는 파일이 /etc/at.allow와 /etc/at.deny 파일이다.
보통 둘중에 하나의 파일만 사용하며, /etc/at.allow 파일을 먼저 읽게 된다. /etc/at.allow 파일에 특정 유저명을 적어넣으면 그 유저들을 제외한 나머지 유저는 at를 사용할 수 없으며, /etc/at.deny는 반대이다.
[root@bluestar /root]# cat < /etc/at.allow
bluesky
jkpark
[root@bluestar /root]#
1. · cron 데몬(주기적 작업실행 데몬)
2. crond 데몬은 일정시간 주기로 반복하는 작업을 할 수 있는 데몬이다.
3. cron 데몬의 사용 : crontab
cron 데몬의 가동은 /etc/rc.d/init.d/crond에 있다. 보통 시스템의 어떤 런레벨이든지 cron 데몬은 부팅시 시작하도록 되어 있는데, 굳이 cron 데몬을 죽이거나 다시 시작하기 위해서는 위의 /etc/rc.d/init.d/crond 실행 스크립트를 실행하면 된다. cron 데몬에 작업을 설정하기 위해서는 cron table을 설정하는 crontab라는 실행파일을 사용한다.
사용법 |
4. usage: crontab [-u user] file
crontab [-u user] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
옵션 |
5. -u 사용자 : 특정 사용자의 crontab 파일을 다루도록 지정한다. 이 명령은 root 유저인 경우만 사용하능하며, 일반적으로는 자신의 cron 스케쥴링에 걸려있는 작업만 보거나 설정을 할 수 있다.
-l : crontab에 등록되어 있는 스케쥴을 확인한다.
-r : 사용자의 crontab 파일을 지운다.
-e : 에디터를 사용하여 crontab 파일을 수정한다.(새로운 스케쥴을 등록한다.)
file : cron table 내용을 기록한 파일에서 읽어와서 설정한다.
사용예 |
6. 우선 cron table을 편집하기 위해서는 crontab -e 명령을 사용한다.
"crontab -e"를 실행하면 cron table을 편집할 수 있도록 vi 에디터가 실행이 되는데 실행하고자 하는 내용을 입력하고 빠져 나오면 되는데 입력 형식은 아래와 같다.
01 4 * * * /etc/rc.d/init.d/network stop
15 4 * * * ~/scripts/my_script.sh
00 5 * * * /etc/rc.d/init.d/network start
위의 내용이 cron table에 입력된 내용인데 이러한 입력형식은 아래와 같다.
M H D m d cmd-line
필드명 |
범위 |
설명 |
M |
0-59,* |
분을 의미하며, *는 모든 범위를 말한다. |
H |
0-23,* |
시를 의미한다. |
D |
1-31,* |
날짜를 의미한다. |
m |
1-12,* |
달을 의미한다. |
d |
0-7,* |
요일을 의미하며, 0과 7은 일요일(Sun)을 의미한다. |
cmd-line |
실행할 명령을 그냥 써준다. |
7.
결국 위의 입력내용중 첫번째 입력인 "01 4 * * * /etc/rc.d/init.d/network stop"은 매일 4시 01분에 뒤의 "/etc/rc.d/init.d/network stop" 명령을 실행하게 되며, 다른 입력내용들도 동일하게 해석된다. 각자의 사용자가 등록한 cron table은 /var/spool/cron 디렉토리에 저장된다.
입력 내용의 다른 예를 보면,
30 13 * * 1-5 mail -s "It's 2pm" root% Dear root%% Are you sleeping??
같은 경우는 월요일부터 금요일까지 오후 1시 30분에 해당 mail 명령을 실행하게 된다.
위에서 % 문자는 개행문자 역할을 하며(풀어쓰면 아래와 같은 명령이 된다), 한줄이 넘어가는 명령을 쓰기 위해서는 백슬래쉬(\)를 써주고 다시 개행해서 쓰면 된다.
$ mail -s "It's 2pm" root
Dear root
Are you sleeping?
[EOT]
Cc:
$
이제 이렇게 작성된 cron table을 보거나 삭제하고자 할 경우에는 -l 옵션(table을 볼 때)과 -r 옵션(table 삭제할 때)을 사용한다.
[root@bluestar cron]# crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.9706 installed on Thu Mar 2 13:26:59 2000)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
30 13 * * 1-5 mail -s "It's 2pm" root% Dear root%% Are you sleeping??
[root@bluestar cron]# crontab -r
[root@bluestar cron]# crontab -l
no crontab for root
[root@bluestar cron]#
8. /etc/crontab
cron table을 작성하는 crontab 실행파일은 /usr/bin/crontab에 위치하고 있다. 그런데 /etc 디렉토리에도 crontab 파일이 있는데 이는 crontab 설정파일이다. 그 내용은 아래와 같다.
[root@bluestar /root]# cat < /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
[root@bluestar /root]#
SHELL은 실행명령을 실행할 쉘의 종류를 적어준다.
PATH는 실행파일을 검색할 PATH이다.
MAILTO는 실행결과를 보고하는데 사용할 email 주소를 적어준다.
그리고 실행파일이 들어가야할 부분에 "root run-parts /etc/cron.xxxxxxx"라고 되어 있다.
root는 뒤의 "run-parts ..."라고 나오는 명령행을 실행할 유저명을 적어준다. 위의 내용들은 각각 처음부터 만들어져 있는 스크립트로서 run-parts라는 스크립트를 이용해서 해당 디렉토리내에 있는 모든 실행파일을 실행하도록 되어있다. 그래서 만일 어떤 명령이 매시마다, 혹은 매일, 매주, 매달마다 실행되어야 하는 명령이라면 해당 디렉토리(/etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly, /etc/cron.weekly)에 실행파일(혹은 스크립트)을 넣어주거나 링크파일을 넣어두면 된다.
참고로 /usr/bin/run-parts 스크립트의 내용은 아래와 같다.
[bluesky@bluestar bluesky]# cat < /usr/bin/run-parts |
9. 첫번째 if문은 run-parts 명령을 인수가 없이 그냥 run-parts만 실행하면 명령어 뒤에 디렉토리를 명시하라는 사용법 메시지를 보여준다는 내용..
두번째 if문은 run-parts의 첫번째 인수가 디렉토리가 아니면 "Not a directory : 입력한 인수"를 출력하고 빠져나감.
세번째줄 for 문은 인수로 받은 디렉토리내의 파일들($1/*)을 하나씩 대입해서 실행파일이면([ -x $i ]) 실행한다는 내용이다.
10. cron 데몬의 사용유저 제한
cron 데몬도 at 데몬과 마찬가지로 유저에 따라 사용을 제한할 수가 있는데 역시 /etc/cron.allow와 /etc/cron.deny 파일을 사용하며, 사용법은 at.allow/at.deny와 동일하다.
'old > Linux' 카테고리의 다른 글
smb.conf 설정 예 (0) | 2010.08.10 |
---|---|
일정 등록(자동 종료 등) - cron (0) | 2010.05.11 |
리눅스용 소스 비교 툴 (0) | 2010.04.19 |
백그라운드 실행 (0) | 2010.04.01 |
우분투 명령어 정리 (0) | 2010.03.25 |