cron table 을 편집하기 위해서는 crontab -e 명령을 사용한다.
입력 형식은 아래와 같다.
#crontab -e
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 | 실행할 명령을 입력 |
각자의 사용자가 등록한 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]
* /etc/crontab
cron table 을 작성하는 crontab 실행파일은 /usr/bin/crontab 에 위치하고 있다. 그런데 /etc 디렉토리에도 crontab 파일이 있는데 이는 crontab 설정파일이다. 그 내용은 아래와 같다.
[root@systech-dev /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
SHELL : 실행명령을 실행할 쉘의 종류
PATH : 실행파일을 검색할 PATH
MAILTO : 실행결과를 보고하는데 사용할 email 주소
그리고 실행파일이 들어가야 할 부분에 "root run-parts /etc/cron.xxxxx" 라고 되어 있다.
root는 뒤의 "run-parts ..."라고 나오는 명령행을 실행할 유저명이고 위의 내용들은 각각 처음부텉 만들어져 있는 스크립트로서 run-parts 라는 스크립트를 이용해서 해당 디렉토리 내에 있는 모든 실행파일을 실행하도록 되어 있다. 그래서 만일 어떤 명령이 매시마다. 혹은 매일, 매주, 매달마다 실행되어야 하는 명령이라면 해당 디렉토리(/etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly, /etc/cron.weekly)에 실행파일(혹은 스크립트)을 넣어주거나 링크파일을 넣어두면 된다.
참고로 /usr/bin/run-parts 스크립트의 내용은 아래와 같다.
PATH : 실행파일을 검색할 PATH
MAILTO : 실행결과를 보고하는데 사용할 email 주소
그리고 실행파일이 들어가야 할 부분에 "root run-parts /etc/cron.xxxxx" 라고 되어 있다.
root는 뒤의 "run-parts ..."라고 나오는 명령행을 실행할 유저명이고 위의 내용들은 각각 처음부텉 만들어져 있는 스크립트로서 run-parts 라는 스크립트를 이용해서 해당 디렉토리 내에 있는 모든 실행파일을 실행하도록 되어 있다. 그래서 만일 어떤 명령이 매시마다. 혹은 매일, 매주, 매달마다 실행되어야 하는 명령이라면 해당 디렉토리(/etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly, /etc/cron.weekly)에 실행파일(혹은 스크립트)을 넣어주거나 링크파일을 넣어두면 된다.
참고로 /usr/bin/run-parts 스크립트의 내용은 아래와 같다.
[root@systech-dev /root]# cat < /usr/bin/run-parts
#!/bin/bash
# run-parts - concept taken from Debian
# keep going when something fails
set +e
if [ $# -lt 1 ]; then
echo "Usage: run-parts <dir>"
exit 1
fi
if [ ! -d $1 ]; then
echo "Not a directory: $1"
exit 1
fi
# Ignore *~ and *, scripts
for i in $1/*[^~,] ; do
[ -d $i ] && continue
# Don't run *.{rpmsave,rpmorig,rpmnew,swp} scripts
[ "${i%.rpmsave}" != "${i}" ] && continue
[ "${i%.rpmorig}" != "${i}" ] && continue
[ "${i%.rpmnew}" != "${i}" ] && continue
[ "${i%.swp}" != "${i}" ] && continue
[ "${i%,v}" != "${i}" ] && continue
if [ -x $i ]; then
$i 2>&1 | awk -v "progname=$i" \
'progname {
print progname ":\n"
progname="";
}
{ print; }'
fi
done
exit 0
첫번째 if 문은 run-parts 명령을 인수가 없이 그냥 run-parts 만 실행하면 명령어 뒤에 디렉토리를 명시하라는 사용법 메시지를 보여준다는 내용.
두번째 if 문은 run-parts 의 첫번째 인수가 디렉토리가 아니면 "Not a directory : 입력한 인수" 를 출력하고 빠져나감.
세번째줄 for 문은 인수로 받은 디렉토리 내의 파일들($1/*)을 하나씩 대입해서 실행파일이면([ -x $1 ]) 실행한다는 내용이다.
3. cron 데몬의 사용 유저 제한
cron 데몬도 at 데몬과 마찬가지로 유저에 따라 사용을 제한할 수가 있는데 역시 /etc/cron.allow 와 /etc/cron.deny 파일을 사용하며, 사용법음 at.allow, at.deny 와 동일하다.
댓글 없음:
댓글 쓰기