본문 바로가기

Infra/Linux

[Linux] 일정 시간마다 작업 실행하기(cron)

크론(Cron)

크론(Cron)은 리눅스의 작업 스케줄러로 정해진 시간이나 주기마다 특정 작업을 실행할 수 있다.

 

크론(Cron) 이 언제 무엇을 하는지 특정 파일에 저장하는 것을 크론탭(Crontab)이라고 하며,

크론탭(Crontab) 작업은 크론(Cron) 이라는 원하는 시간에 원하는 명령 또는 프로그램 을 수행하도록 리스트를 만드는 것이다.

 

언제 사용할까?


  • 특정 시간에 특정 작업을 해야할때
  • 반복된 시간에 반복된 작업을 해야할때
  • 예약 작업을 사용해야 할때

 

주요 명령어


1. 크론탭 작업 내용 편집

$ crontab -e

2. 크론탭 작업 내용 확인

$ crontab -l

3. 크론탭 작업 삭제

$ crontab -r

 

기본 문법


# 분 시 일 월 요 [실행할작업]

 # ┌───────────── 분 (0 - 59)
 # │ ┌────────────── 시 (0 - 23)
 # │ │ ┌─────────────── 일 (1 - 31)
 # │ │ │ ┌──────────────── 월 (1 - 12)
 # │ │ │ │ ┌───────────────── 요일 (0 - 6) (0이 일요일, 6이 토요일이다.)
 # │ │ │ │ │
 # │ │ │ │ │
 # * * * * *  [실행할작업]
  • 해당사항이 있는 자리에만 숫자를 적고 나머지는 * 그대로 표기
  • 요일의 경우 일요일이 0이고 토요일이 6인 점 주의
  • 아무것도 입력하지 않고 *****로 두면 매분 마다 실행
  • 주기를 입력할 땐 / 를 사용
  • 구간을 입력할 땐 - 사용
  • 따옴표를 입력하여 여러 시간을 동시에 입력 가능
  • 문법이 틀릴 경우 아래와 같이 경고 메시지 출력됨
  • 아래의 경우 시간(hour)부분이 잘못되었단 것으로, 시간이 입력된 부분 위주로 디버깅
crontab: installing new crontab
"/tmp/crontab.0doyEF":1: bad hour
errors in crontab file, can't install.
Do you want to retry the same edit?

 

사용 예제


ex) 매 시 정각에 실행

0 * * * * [실행명령어]

ex) 매일 오전 8시 정각에 실행

0 8 * * * [실행명령어]

ex) 평일 오후 5시 정각에 실행

0 17 * * 1-5 [실행명령어]

ex) 매월 1일 자정에 실행

0 0 1 * * [실행명령어]

ex) 15분마다 실행

*/15 * * * * [실행명령어]

 

사용법


crontab -e 명령어를 입력후 작업할 내용을 추가하면 된다.

스크립트를 미리 만들어두고 일정 시간마다 해당 스크립트를 실행하도록 작업해도 되고, 활용 방법은 다양하다.

작업 추가 후 확인은 crontab -l 명령어로 확인한다.

 

로깅


기본 로그파일 확인

$ cat /var/log/cron

 

각 작업마다 로그파일 지정

$ crontab -e

# 예시: 0 2 * * * /home/test/script.sh >> /home/test/cron.log 2>&1
[실행할 스크립트] >> [로그 위치] 2>&1

 

주의 사항


cron 은 보안 문제때문에 shell 의 초기화 설정 파일(.bash_profile, .profile 등)을 읽지 않는다.

그래서 시스템의 기본 PATH(/bin, /usr/bin) 에 없는 파일이나 공유 라이브러리(share library)를 사용하는 프로그램이라면 cron 을 통해 실행할 때 직접 환경 변수를 넣어줘야 한다.

 

일반적으로 cron 을 사용할 때는 다음 규칙을 따르는 게 좋다.

1. 실행은 별도 스크립트로 분리
간단한 명령이 아닐 경우 별도의 실행 script 를 작성해서 실행합니다.

2. 절대 경로 사용
실행하려는 프로그램을이 /bin/이나 /usr/bin 에 있지 않다면 절대 경로로 적어주는 게 좋다.

3. 실행에 필요한 환경 변수 지정
PATH 나 LD_LIBRARY_PATH 등 프로그램 실행에 필요한 변수가 있다면 실행 스크립트안에 명시적으로 적어 주는 게
실수를 방지할수 있다.

 

 

 

참고

1. https://itwiki.kr/w/%EB%A6%AC%EB%88%85%EC%8A%A4_cron

2. https://asufi.tistory.com/entry/Linux-%ED%81%AC%EB%A1%A0-Cron-%ED%81%AC%EB%A1%A0%ED%83%ADCrontab-%EC%82%AC%EC%9A%A9%EB%B2%95 

3. https://www.lesstif.com/lpt/linux-scheduler-crontab-77955238.html

 

 

 

 

 

 

 

 

반응형