회사에서 크론탭을 이용하여, 쉘 스크립트를 지정된 시간에 실행할 수 있도록 진행하였다.
많은 글들을 보았고, 내게 필요했던 정보들을 기록하려한다.
크론탭(Crongtab)
매일 혹은 주기적으로 해야하는 작업을 실행 시키기 위해 사용한다.
나 같은 경우는 실행 중인 프로세스를 체크하는 스크립트를 매일 7시에 실행,
일정 기간이 지난 로그들을 삭제하는 스크립트를 매일 11시에 실행 등의 작업을 주기적으로 하기 위해 사용하였다.
- 기본 사용 방법
crontab -l # 저장된 작업 리스트 출력
crontab -e # 크론탭 작업 수정
crontab -r # 저장된 작업 삭제
crontab -u [사용자명] [파일] # 해당 사용자에게 파일에 적힌 크론탭 내용 등록
# 은 주석
- 규칙
# /etc/crontab
# 분(0-59) / 시(0-23) / 일(1-31) / 월(1-12) / 요일 (0-6 : 0은 일요일 ~ 6은 토요일) [유저이름] [명령어]
* * * * * 유저이름 명령어
# crontab -e
# 분(0-59) / 시(0-23) / 일(1-31) / 월(1-12) / 요일 (0-6 : 0은 일요일 ~ 6은 토요일) [명령어]
* * * * * 명령어
/etc/crontab의 경우 어떤 사용자의 크론탭에서 사용할건지 사용자명을 지정해줘야한다. - root 권한이 있는 경우
crontab -e 의 경우 해당 사용자의 크론탭을 편집할 수 있다. - root 권한이 없는 경우
etc/crontab
root 권한이 있을 경우, etc/crontab 파일을 편집하여 작업할 수 있다.
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
앞에 다섯개의 별이 실행 시간에 대해 규칙을 정하는 부분이고, 사용자를 적는 부분, 실행할 명령어를 적는 부분으로 되어있다.
crontab -e
root 권한이 없는 경우, crontab -e 명령어를 통해 크론탭을 편집한다.
# delete log
# 매일 11시 30분에 해당 sh을 실행
30 11 * * * /tmp/test/deltelog.sh > /dev/null 2>&1
# 매일 07시에 해당 sh을 실행
# restart process
0 7 * * * * /tmp/test/service.sh start > /dev/null 2>&1
service crond restart
크론탭을 수정하고 난 뒤에는 꼭 restart 해줘야 적용된다.
cat /var/log/cron
크론탭의 수행 이력과 변경 내용에 대한 로그는 cat /var/log/cron 명령어를 통해 확인할 수 있다. ( root 권한으로! )
크론탭이 정상적으로 실행되지 않을 때
크론탭이 정상적으로 실행되지 않을 때는 로그 파일을 생성해서 확인해보자
test.sh >> /tmp/testCron.log 2>&1
- `test.sh` : 실행할 쉘 스크립트의 파일 이름
- ` >> /tmp/testCron.log` : 쉘 스크립트의 실행 결과를 파일에 추가하는 리다이렉션
`>>` 는 파일이 존재하면 뒤에 오는 파일에 결과를 추가하고, 파일이 없으면 새로 생성한다. - `2>&1` : 표준 에러를 표준 출력으로 리다이렉션 하는 부분.
즉, 에러메시지가 /tmp/testCron.log 파일에 기록된다.
크론탭 사용시 주의할점
규칙에 맞게 설정했는데도 제대로 동작하지 않는 경우가 있다. 대부분의 경우 환경변수와 절대경로가 말썽이다.
!! 크론탭은 실행 시에 별도의 쉘을 띄운다. !!
1. 환경변수
- SHELL
작업을 실행시킬 쉘을 지정할 수 있다. 지정하지 않을 시 기본 값으로 /bin/sh 로 쉘을 시작한다.
-PATH
크론탭은 쉘을 새로 띄우기 때문에, 쉘에서 프로그램을 찾기위한 PATH를 지정해줄 필요가 있다.
계정으로 로그인 해서 쉘을 실행시키는게 아니기 때문에, 계정에 있는 PATH 변수를 사용할 수가 없다.
- MAILTO
마일토? 메일토.. 메일 투! 크론이 수행한 결과를 메일로 보낼 수 있다. 기본 값으로는 작업을 실행한 주체에게 전송한다.
- HOME
크론탭의 home 디렉토리 경로를 설정한다. 기본적으로 크론탭을 실행한 유저의 홈디렉토리로 /etc/passwd에 설정된 경로를 따른다.
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
2. 절대경로 / 상대경로
크론탭은 실행시에 별도의 쉘을 띄운다. 상대경로로 명령어를 사용하면 Crong은 알 수가 없다..
항상 절대경로로 명령어를 사용해야한다
'리눅스' 카테고리의 다른 글
리눅스 repository 알아보기, yum과 dnf 명령어 (0) | 2023.12.05 |
---|---|
리눅스 디렉토리 구조_간단하게 정리 : /home, /etc, /var, /usr ... (0) | 2023.11.30 |
리눅스 쉘(Shell) 개념. (1) | 2023.11.30 |