뭐든 즐기면서 ;)

linux cron / linux crontab 본문

서버/Linux

linux cron / linux crontab

Tada.*+ 2022. 2. 9. 14:53
728x90

※ cron이란 : 특정한 시간에 특정한 작업을 수행하도록 하는 것으로써 스케줄링 방법 중 하나입니다.


cron의 종류

1. system cron : 시스템에서 기본적으로 사용하는 cron입니다.

2. user cron : root 또는 일반 사용자가 자신의 cron을 직접 설정하여 사용하는 것입니다.


사용하는 이유

- 주기적으로 반복해야 하는 작업을 자동 실행될 수 있도록 하기 위함. 어떠한 작업을 특정시간에 실행하도록 예약하는 거라고 볼 수 있습니다.

- 보안과도 관련되어 있습니다. 보안 취약점을 매일 검사할 때 쓰이기도 합니다.


Crontab과 cron 관련 디렉토리 및 파일

  • crontab 파일(아래이미지 참고) : cron작업을 설정하는 파일입니다. cron프로세스는 /etc/crontab 파일에 설정된 것을 읽어서 작업을 수행합니다.

contab과 cron관련 파일들

  • crontab 파일 경로 : 일반적으로, 사용자cron 경로는 BSD계열의 경우 '/var/spool/cron/userID'에 위치하며, 솔라리스 계열은  '/var/spool/cron/crontabs/userID'에 위치하고 있습니다. 아래 이미지는 BSD 계열의 리눅스입니다.

crontab 경로 및 파일

위 이미지를 참고하여 crontab 파일 내용을 확인해 보았을 때 '/DB/..' 앞에 '0 2 * * *'이 보일 것이다.

이것이 실행되는 시간을 표시하는 것이다.

'분 시 일 월 요일'로써 '0분 2시 * * *'에 해당 shell을 실행 작업하라는 뜻입니다.

  • cron 파일 : /etc/crontab 파일의 내용을 확인해 보면 아래와 같고, 그안에 cron.*로된 파일들을 실행하게 하기 위한 명령줄이 작성되어 있습니다.

이미지 출처 : https://jhnyang.tistory.com/68

위 이미지를 보면 주석으로 작성 형식에 대해 설명해 주고 있습니다. # m h dom mon dow user command

'분 시 일 월 요일 사용자 실행명령' 형식입니다.

위 crontab에 작성되어져 있는 'cron.*'파일들은 시스템cron입니다. 

  • 로그 파일 경로 : /var/log/cron
  • cron 허용/비허용 ID 설정 등 : /etc/cron.allow & /etc/cron.deny
  • /usr/sbin/anacron : 크론과 같이 동작하는 프로그램입니다만, 다른 점은 서버가 일정 시간 중지되었을 때에도 작업이 실행되는 것을 보장하기 위해 사용됩니다.

cron 실행 흐름

전원 > init.d 데몬 실행 > crond 데몬 실행 >

 - /etc/crontab 파일을 읽어 안에 작성된 'cron.*'파일에 작성된 작업을 수행합니다.

 - /var/spool/cron/userID 경로에 있는 파일을 읽습니다.

> cron에 의해 수행되지 못한 작업은 anacron에 의해 수행됩니다.

> 로그 파일에 실행 기록을 남깁니다.


crontab, cron 등록

시스템 cron은 root권한으로 /etc/crontab에 등록하여 주기적으로 실행가능하고,

사용자 cron은 crontab 명령어를 통하여 실행파일 또는 명령줄을 등록할 수 있습니다.

 

  • crontab 명령어 사용법 : # crontab [option] 파일명
      • -l : crontab에 설정된 내용을 출력
      • -e : crontab의 내용을 작성 또는 수정
      • -r : crontab의 내용을 삭제
      • -u 사용자명 : root사용자가 특정 사용자의 crontab 파일을 다룰 때 사용.옵션

사용자 cron 내용

  • 시간을 작성할 때에는 아래와 같은 형식으로도 작성이 가능합니다.
    • * : evry
    • - : 이 사이의 모든 값 (1-3이면 1,2,3일)
    • , : 지정한 모든 값 (1,3,4면 1,3,4일)
    • / : 연결된 설정 값 범위에서 특정 주기로 나눌 때 사용
      • 예를 들면
      • */10 * * * * * ...../..sh (매10분마다 실행)
      • * * * 1-12/2 * ...../..sh (1월부터 12월까지 2개월마다 실행)

crontab 등록 예제

# 아래 명령어를 실행하면 vim과 같은 화면이 나옵니다.
> crontab -e
# 작성 예 ( 매일 오전 2시에 /DATA/DB/batchBackup.sh 실행)
# *이 의미하는 바는 순서대로 = 분 시 일 월 요일[0(일) ~ 6(토)]
* 2 * * * /DATA/DB/batchBackup.sh

# 매주 월요일, 수요일
0 2 * * 1 /DATA/DB/backupDaily.sh
0 2 * * 3 /DATA/DB/backupDaily.sh

# 매주 토요일
0 2 * * 6 /DATA/DB/backupWeekly.sh

# 매월 1일
0 2 1 * * /DATA/DB/backupMonthly.sh

# 6, 12월마다
0 2 1 6 * /DATA/DB/backupHalfYear.sh
0 2 1 1 * /DATA/DB/backupHalfYear.sh

# 1월 1일마다
0 2 1 1 * /DATA/DB/backupAnnually.sh
~
~

위와 같이 진행하면 /var/spool/cron 하위에 로그인한 id와 같은 파일이 생성됩니다.

아래 이미지는 그 파일의 내용을 확인해 본 것입니다.

728x90
Comments