Linux

[Linux] cron 작업 스케줄 관리

gangintheremark 2024. 4. 17. 20:25
728x90

cron 서비스 

cron 은 UNIX/LINUX 시스템의 정기적으로 등록된 작업을 실행시켜주는 서비스이다. cron 서비스를 이용하려면 다음 세 가지 구성요소가 필요하다

  • crontab 파일 : 정기적 작업 등록 파일
  • crontab 명령 : 작업 등록을 위해 사용하는 명령
  • crond : cron 데몬 프로세스로 작업 등록 파일에 정의된 작업을 처리하는 데몬 프로세스

/etc/crontab 파일 형식 ✨

root가 설정하는 작업 등록 파일로 모든 사용자에 대한 작업을 등록할 수 있다 ➜ 640 권한 설정 권장

분은 0-59까지 숫자로 작성
시는 0-23까지 숫자로 작성
일은 1-31까지 숫자로 작성
월은 1-12까지 숫자로 작성
요일 요일은 0-6까지 숫자로 작성 ( 0:일요일, 1:월요일 ~ )
계정명 작업을 실행할 사용자 계정명
작업 실행할 작업으로 절대 경로로 작성

* : 필드에 해당하는 모든 값  |   - : 범위의 값 지정  |   , : 값 구분  |    / : 간격 값

0 1 * * * root /work/batch.sh : 매일 1시에 root 계정으로 /work/batch.sh 실행
0 8-10 * * * gang /work/batch.sh : 매일 8시, 9시, 10시에 gang 계정으로 /work/batch.sh 실행
0 1,2,5 * * * root /work/batch.sh : 매일 1시, 2시, 5시에 root 계정으로 /work/batch.sh 실행
20 6 * * 1-5 root /work/batch.sh : 매주 월요일부터 금요일 6시 20분에 root 계정으로 /work/batch.sh 실행
*/5 * * * * root /work/batch.sh : 매 5분 간격으로 root 계정으로 /work/batch.sh 실행
#0 23 * * * gang /work/batch.sh : 주석(#) 처리 되었으므로 실행하지 않음


개별 사용자의 작업 등록

관리자는 crontab 명령으로 사용자를 명시적으로 지정하여 해당 사용자의 작업을 등록하거나 삭제할 수 있지만 일반 사용자는 자신의 작업만 등록하거나 삭제할 수 있다.

 

개별 사용자가 crontab 명령으로 등록한 작업은 /var/spool/cron 디렉터리에 사용자 계정명 파일로 저장된다. e.g. /var/spool/cron/gang

 

crontab [-u user]

  • -e : 개별 사용자의 cron 작업 등록 파일 편집
  • -l : 개별 사용자의 cron 작업 등록 파일 출력
  • -r : 개별 사용자의 cron 작업 등록 파일 삭제
crontab -u gangintheremark -e : root가 gang 계정 작업 등록 파일을 편집한다.
crontab -r : 현재 사용자가 자신의 작업 등록 파일을 삭제한다.

 

30 23 * * * /work/batch.sh 1>/dev/null 2>&1

  • 매일 23시 30분에 gang 계정으로 /work/batch.sh 작업 실행한다. (표준 출력과 표준 에러는 생략)
  • crontab 파일 설정과 다른 점은 계정별로 파일이 생성되므로 작업을 실행할 계정명을 명시하지 않는다.
  • 계정별로 등록한 cron 작업은 /var/spool/cron/gang 파일에 저장된다.
1>/dev/null 2>&1
일반적으로 cron을 통해 자동으로 실행되는 작업은 모니터 출력이 불필요하므로 출력 재지정을 통해 표준 출력과 표준 에러를 모두 /dev/null 장치파일로 재지정하여 버린다.

crontab 명령 접근제어

crontab 명령을 실행할 수 있는 사용자를 제한하여 허용하지 않는 사용자가 임의로 작업 등록을 못하도록 설정한다. ➜ cron.allow cron.deny

  • 화이트리스트 정책 : /etc/cron.allow 파일에 허용할 사용자를 지정하고 나머지 사용자를 모두 차단한다.
  • 블랙리스트 정책 : /etc/cron.deny 파일에 차단할 사용자를 지정하고 나머지 사용자를 모두 허용한다.

만약 cron.allow 파일과 cron.deny 파일 모두 생성하면 cron.allow 파일이 우선 적용되며 2개의 파일이 모두 없는 경우엔 root 만 crontab 명령을 사용할 수 있다.

728x90