Crontab 등록에 관한 정리.

  1. 크론표현식에서 실행시간 표시, 반복
  2. Shell 선언. 스크립트 실행에 사용할 shell을 정의
  3. 변수선언 변수명=값(수식/호출식)을 이용해 변수를 정의
  4. 로그 기록. 각 명령어 뒤에 로그파일을 지정해 출력 redirection 시켜 로그 파일 생성

  1. 크론표현식에서 실행시간 표시, 반복
    대부분의 시스템에서 “* * * * *” 5개의 시간표시 항목을 가짐.
    분, 시, 일, 월, 요일, (마지막에 년도가 오는 표현식도 있음, 대부분 5자리로 표현)
    분 : 0-59
    시 : 0-23
    일 : 1-31
    월 : 1-12
    요일 : 0-6 or 1-7 ;; 0-6(일반적인 크론 0이 일요일 6이 토요일), 1-7(Quartz크론 1이 일요일)

    주로 쓰는 표현 값은 아래와 같음.
    * : 모든 값. (매 분, 매 시, 매 일 등에 사용)
    , : 여러개의 값을 지정할 때. 시간자리에 다음 표현일 때 6,12 -> 6시, 12시에 실행.
    : 범위. 만약 분 자리에 “5-10” 이라면 5~10 분동안 매 분을 실행. 5,6,7,8,9,10 과 동일한 값.
    / : 시스템에 따라 표현방식은 상이하나. 몇 분/시.. 마다 한 번을 표현
    분 자리에 “*/5” 라면 5분마다 한 번씩 실행. 시스템에 따라 “0/5″로 표현
    이때는 0분부터 5분 마다 실행(Quartz/Spring 표현식)
    L : 범위의 마지막 숫자, “0 20 13 ? * 6L” (매월 마지막 토요일 13:20)-> Quartz 표현식(6자리)
    에서 사용되는 걸로 추정
    W : 주중으로 지정
    # : N번째 특정요일 설정
    EX>
    5 * * * * : 매시간 5분에 실행
    */5 * * * * : 5분마다 실행
    0,10,20,30,40,50 * * * * : 0,10,20… 분마다 실행
    0-10 17 1 * * : 매달 1일 17시 0분부터 10분까지 매 분 실
    5 8-20/3 * * * : 8시에서 20시까지 3시간마다 실행
    0 17 * * 1 : 매주 월요일(1) 17시에 실행
    0 21 * * 1-5 : 매주 월~금요일 21시에 실행

    CRON 편집창에서는 일반 스크립트에서 쓰는 명령어로 변수치환이 적용되지 않음.
    ex> touch /tmp/crontest_$(date +%Y%m%d%H%M).log
    -> /tmp/crontest_202307311530.log와 같이 명령어의 결과값을 파일이름으로 치환할 수 있으나 crontab 편집창에 넣으면 제대로 적용되지 않음.
    동일한 명령어를 crontab에 넣으면 /tmp/crontest_ 으로 생성.

    하기와 같이 “`” 문자와 “\” 문자를 사용하여 표현가능.

2. Shell 선언. 스크립트 실행에 사용할 shell을 정의
Shell Script 파일 가장 처음에 해당 shell에서 사용할 shell을 정의
별도의 정의가 없는 경우 시스템의 기본 shell을 사용하게 됨.

#!/usr/bin/sh

3. 변수선언 변수명=값(수식/호출식)을 이용해 변수를 정의
변수명=값 또는 수식
LOGDIR=/var/log
BAKDATE=$(date +%Y%m%d%H%M)

일반적으로 상수는 대문자, 변수는 소문자를 사용.
쉘 스크립트의 변수는 기본적으로 type이 없으며 문자열로 인식
변수에 공백이 포함된 경우는 “”로 감싸서 처리,
명령어 실행결과를 치환하는 경우 $() 또는 `으로 감싸서 명령어 치환
$변수명 또는 ${변수명} 으로 변수 사용,
여려 변수를 사용하거나 변수를 변수에 입력하는 경우, ${} 사용으로 변수를
명확하게 구분해야 됨.

사용자에게 입력받기 : read 함수 사용. read를 이용해 id 변수에 입력/출
echo -n “Enter your ID : “
read id
echo “Now your ID is $id”

4. 로그 기록. 각 명령어 뒤에 로그파일을 지정해 출력 redirection 시켜 로그 파일 생성
crontab 편집창에서는 1번예에서 봤듯이 “`” 와 “\”을 이용할 필요가 있음.
shell script 내에서나 shell에서는 선언된 변수를 불러오거나 명령어 치환을 사용.


cp -rp /test/test* /testbak >> $LOGDIR/$BAKDATE_cpwork.log 2>&1
cp -rp /test/test* /testbak >> /var/log/$(date +%Y%m%d%H%M)_cpwork.log 2>&1
> 으로 리디렉션하는 경우 덮어쓰기 됨.
>> 으로 리디렉션하는 경우 덧붙여 쓰게 됨.
2>&1 : 표준출력 지정된 곳으로 표준에러도 같이 보냄. 즉 리다이렉션된 앞의 파일로
에러내용 및 정상출력 모두 기록.
0 : 표준 입력
1 : 표준 출력
2 : 표준 에러 출력
화면에 실행내용을 출력되지 않게 하기 위한 용도로도 사용 /dev/null 로 보내는 경우

cp -rp /test/test* /testbak | tee -a $LOGDIR/$BAKDATE_cpwork.log
tee 명령어로 로그기록 가능, 기본적으로 화면출력도 유지, 덧붙여쓰기로 됨.
단, 표준 출력만 리다이렉션 됨. 표준에러는 화면에만 찍히고 기록되지 않음.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다