한국어

리눅스 ubuntu Linux - Cron 사용방법

2014.03.22 12:10

정성규 조회 수:8240

출처:  http://www.zetswing.com/bbs/board.php?bo_table=OS_LINUX&wr_id=17



1)해당 프로그램이 설치되었는지 검사한다.

rpm -qa | grep cron 설치가 안되었다면

http://centos.arcticnetwork.ca/4.0/os/i386/CentOS/RPMS/crontabs-1.10-7.noarch.rpm

에서 다운받아서 설치합니다.

 

2)매번 리부팅할때마다 자동으로 데몬이 실행되게 ntsysv에 crond에 체크를 합니다.

체크가 안되었다면 체크를 하고

/etc/init.d/crond start

/etc/init.d/crond restart

/etc/init.d/crond stop

슈퍼데몬 재시작

 

3)스케쥴링에 작업내용 추가하기

스케쥴링을 수정한후 저장하면 곧바로 crond 데몬이 읽어 시간별 작업을 실행합니다.

cron에는 명령어 문법이 있숩니다.모두 일곱개이 필드가 있습니다. 그 포맷을 보면
mimute hour day month weekday username command 
분(minute) : 0-59
시(hour) : 0-23
일(day_of_month) : 1-31
월(month) : 1-12
요일(weekday) : 0-6 (일요일~토요일)
사용자명(command): 실행할 파일의 소유권자

명령(command) : 쉘 명령

※ 여섯번째는 안써줘도 상관없습니다.

※ *는 와일드 카드로 모든것을 의미합니다.(ex:요일이라면 일주일내내) 

※ */숫자 는 숫자간격마다 실행합니다.

4. Cron 실행계획 수정, 확인하기

 

수정하기

 

crontab -e

※ 수정한후 저장하고 종료하기 : esc키 -> :wq

※ 수정한후 저장안하고 종료하기 : esc키 -> :q

 

※ 데비안 리눅스는 GNU NANO라고 나오면 사용법이 달라진다.

수정후 ctrl+x 후 y 누르고 저장함 n누르면 저장안하고 종료하고 ctrl+c하면 취소됨

 

pico nano 소스 프로그래밍  
2006/09/18 11:00

http://blog.naver.com/endfirst/30008858448
 

nano-1.0.0.tar-endfirst.gz 
GNU nano는 사용자 친화적이고 직관적인 에디터로 유닉스 계열의 운영체제에 사용됩니다.

일반 유저및 파워 유저 모두를 타겟으로 하여 사용하기 쉽고 안정적인 텍스트 에디터를 제공하는데 목적을 두고 있으며, 버그 없는 안정적인 텍스트 에디팅을 경험할 수 있습니다.

GNU nano는 텍스트 에디터인 Pico의 최상의 클론으로서 명성이 높습니다

 

확인하기

 

crontab -l

※ crontab -l 은 단지 현재 실행계획을 볼수만 있고 수정은 할수 없다.

 

초기화하기

 

crontab -r

※ contab 실행계획을 초기화한다.

 

5. 여러 시간날짜별 예제

00 00 * * 0 /usr/local/lee
# 매주 일요일에 /usr/local/lee을 실행합니다.

00 04 * * 1 /sbin/reboot
# 매주 월요일 04시에 리부트 실행

# 기본 명령어도 절대경로로 입력
00 00 15 * 1 /usr/local/lee

-매주 월요일과 매달 15일에 /usr/local/lee을 실행합니다.

다섯번째자리 요일설명
0과 7은 일요일, 1은 월요일, 2는 화요일의 순으로 작성
요일 표시방법 : 1 (월요일) 2,6 (화요일과 토요일) 1-4 (월요일부터 목요일까지)

작업 입력 [ 분 시 날짜 달 요일 작업내용 ]의 순서로 이루어져 있다.

예) 30 16 * * * reboot

- 매일 16:30분에 리부팅을 실행한다.

예) 25 8 1 * * cat /home/hello.txt | formail -s sendmail abcd@unitel.co.kr

- 매월 1일 08:25분에 /home/hello.txt 내용을 abcd@unitel.co.kr로 메일로 보냄

*요일표시 ;

- 0과 7은 일요일, 1은 월요일, 2는 화요일..의 순으로 작성한다.

- 표시방법 : 2,6 (화요일과 토요일) , 1-4 (월요일부터 목요일까지)

*달 표시 ;

- 1-12/3 (1월부터 12월까지 3개월마다)

00 00 1,15 * 1 /usr/local/lee
매주 월요일과 매달 1일, 15일에 /usr/local/lee을 실행합니다.

30 06 * * * /usr/local/lee
매일 06시 30분에 /usr/local/lee를 한번 실행합니다.

*/10 * * * * /usr/local/lee
매일 10분 간격으로 /usr/local/lee을 실행합니다.

2/10 * * * * /usr/local/lee
매일 10분 간격으로 /usr/local/lee을 2로 끝나는 분(12, 22, 32, 42, 52 등)에 실행합니다.

5 */1 * * * /usr/local/lee

매일 1시간 간격으로 5분대에 /usr/local/lee을 실행합니다.

※ 분단위를 *로 설정하고 실행하면 매분마다 실행되는 엄청난 일이 발생한다.


* 15,17 * * * /usr/local/lee

매일 15시, 17시에 매분마다 실행됨

00 15,17 * * * /usr/local/lee
매일 15시0분, 17시 0분에 한번씩 실행됨

11 13 10 01 * /usr/local/lee
1월 10일 오후1시 11분에 실행됨

11 10 10 01 * /usr/local/lee
1월 10일 오전 10시 11분에 실행

6. 실행계획에 포함시킬수 있는 파일들

펄 파일 (*.pl)

쉘스크립트 파일 (*.sh)

PHP CLI 쉘스크립트 파일 (*.php)

7. 실행계획에 포함시킬때 주의사항

7-1. crontab에 쉘스크립트를 기재할때 절대경로를 기재한다. 명령어를 곧바로 써도

시스템명령이든 추가된명령이든 절대경로를 사용한다.

7-2. 쉘스크립트 내부의 내용에는 시스템 명령(ls, mv 등등)외에 사용자 정의 파일, 설치된

프로그램 명령어는 모두 절대경로를 기재한다.

 

사용 예제1

/usr/bin/mysqlcheck -Aao --auto-repair -u root --password=xxxxxx

> /junsik_sh/db_optimize.log;

사용 예제2

58 01 * * * mkdir /jun

 

 상대경로로 명령어을 기재하면 Cron은 알수 없기 때문에 항상 절대경로로 명령어를

기재해야 한다.

 

※ 절대경로 쉘스크립트 예제

 

#!/bin/bash

# Writer : Zetswing

# FileName : TomcatCheck.sh

##########
SHELL=/bin/bash
JAVA_HOME=/home2/ysaraha/ysaraha.ttongfly.net/java/jdk1.5.0_10
export JAVA_HOME
##########

PROCESS_NAME=tomcat

PROCESS_COUNT=`ps -ef | grep $PROCESS_NAME | grep -v grep| wc -l`

if [ $PROCESS_COUNT = 0 ]
then /home2/ysaraha/Tomcat.sh s
fi

echo "TomcatCheck Success!"

 

7. PHP 쉘스크립트 파일로 cron 이용해 실행하기

 

*/1 * * * * /usr/local/apache2/htdocs/index.php

*/1 * * * * php /usr/local/apache2/htdocs/index.php

*/1 * * * * /usr/local/bin/php /usr/local/apache2/htdocs/index.php

 

※세가지 경우 모두 해당 파일 상단에 php의 경로를 적당히 써주어야 합니다.

※세가지 경우 모두 실행권한을 chmod 700(root경우) 반드시 주어야 합니다.

※경로는 무조건 절대경로를 써야 합니다.

 

8) 크론은 실행계획이 처리될때마다 ROOT나 해당계정에게 메일을 보내준다.

메일을 안보내게 하는 방법을 알아보자

 

자신의 계정이 루트 계정일 경우

 

1. /etc/crontab 파일을 편집한다.

 

2. 아래 내용에서 MAILTO=ROOT 을 MAILTO="" 로 변경한후 저장한다.

 

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=ROOT
HOME=/

 

자신의 계정이 사용자 계정일 경우

 

쉘모드에서 crontab -e 명령으로 실행계획의 맨상단에 MAILTO="" 를 추가한다.

 

9) 주석 표시

 

해당 라인의 맨앞에 #을 넣으면 해당라인은 주석처리 됩니다.

10) 현재 통서버의 ysaraha 계정에서 돌아가는 crontab 실행계획 내용

MAILTO=""

*/360 * * * * /home2/ysaraha/Backup.sh

*/30 * * * * /home2/ysaraha/TomcatCheck.sh

11. 정기적인 실행계획을 원하면 아래의 폴더에 파일을 갖다 놓는다.

/etc/cron.hourly - 매시간마다 실행

/etc/cron.daily - 매일마다 실행

/etc/cron.weekly - 매주마다 실행

/etc/cron.monthly - 매달마다 실행

※ 위의 실행계획은 /etc/crontab에 정의되어 있다.

12. crontab 로그 남기는 방법

# 실행시 nohup으로 실행하면 된다.
02 11 28 03 * nohup /sunrise/cron/run_imsi.sh >> /sunrise/cron/nohup_run_imsi.out

Copyright ⓒ Fallen Leaves™ 2000~2018 All rights reserved.
XE Login