Linux

[Linux] cron / crontab

thdwldud 2025. 8. 17. 19:56

cron

  • 주기적으로 실행하는 작업은 시스템 운영에 필요한 작업과 사용자의 필요에 의한 작업으로 나눌 수 있음
    • 시스템 운영에 필요한 작업 : root 권한으로 /etc/crontab 에 등록하여 주기적으로 수행
    • 사용자 : crontab 이라는 명령을 수행해서 등록
  • crontab 파일 : minute hour day_of_month month day_of_week user-name command
필드 설명
minute 분(minute)
0~59 로 설정
hour 시(hour)
0~23 로 설정
day of month 날(day of month)
1~31 로 설정
month 월(month)
1~12 로 설정
day of week 요일(day of week)
0~7로 설정
- 일요일(0, 7) 월요일(1) 화요일(2) 수요일(3) 목요일(4) 금요일(5) 토요일(6)
- sun mon tue wed thu fri sat
user-name 사용자 이름을 작성 (일반적으로 생략)
command 실행할 명령어를 기재
명령어 앞에 사용자 이름을 기재해도 됨

 

  • 각 필드는 위의 표에 작성된 설정 값 이외에를 '*', '-', ',', '/' 를 사용할 수 있음
    • * : 모든(all)
    • - : 연결된 설정 값을 지정할 때 사용
    • , : 연결되지 않는 값을 나열할 때 사용
    • / : 연결된 설정 값 범위에서 특정 주기로 나눌 때 사용

crontab

  • 사용자가 주기적인 작업을 등록하기 위해 사용하는 명령
  • 설정된 작업은 '/var/spool/cron/사용자아이디' 파일로 저장됨
    • 만약 아이디가 posein 이면 /var/spool/cron/posein 이라는 파일이 생성되면서 관련 정보가 저장됨
crontab [option]
crontab [option] 파일명

옵션

옵션 설명
-l crontab에 설정된 내용을 출력
-e crontab의 내용을 작성하거나 수정
-r crontab의 내용이 저장된 파일을 삭제
-u root 사용자가 특정 사용자의 crontab 파일을 다룰 때 사용
-i -r 옵션으로 crontab 설정 파일을 삭제하기 전에 질의를 진행해서 y 또는 Y를 입력하는 경우에만 실행되도록 지정

사용 예

  • 설정된 crontab의 내용을 출력
crontab -l
  • crontab의 내용을 작성하거나 수정
crontab -e
  • 저장된 crontab 설정 파일을 삭제
crontab -r
  • posein 사용자의 crontab 내용을 작성하거나 수정
crontab -e -u posein
  • 저장된 crontab 설정 파일을 삭제하기 전에 질의 (y/N)를 진행
crontab -ir
  • schedule.txt 파일에 설정된 내용을 불러와서 등록
crontab schedule.txt

 

crontab 설정 예제

  • 월요일부터 금요일까지 오후 12시에 /home/posein/work.sh 라는 스크립트를 실행
0 12 * * 1-5 /home/posein/work.sh
  • 1월부터 12월까지 2개월마다 1일날 오전 4시 10분에 /etc/check.sh라는 스크립트를 실행
10 4 1 */2 * /etc/check.sh
10 4 1 1-12/2 * /etc/check.sh
10 4 1 1,3,5,7,9,11 * /etc/check.sh
  • 월요일 오전 10시에 ‘Notice’라는 제목으로 /root/notice 라는 파일의 내용을 지정한 메일 주소인 posein@naver.com으로 발송
0 10 * * 1 cat /root/notice | mail -s "Notice" posein@naver.com
0 10 * * mon cat /root/notice | mail -s "Notice" posein@naver.com
  • 월, 수, 금요일 오전 4시에 ‘.bak’로 끝나는 파일을 찾아 삭제
0 4 * * 1,3,5 find / -name '*.bak' -exec rm rf {} \;
  • /etc/heartbeat.sh를 10분 주기로 실행
*/10 * * * * /etc/heartbeat.sh
0-59/10 * * * * /etc/heartbeat.sh

cron 사용자 제한

  • /etc/cron.allow 파일과 /etc/cron.deny 파일로 cron 사용자 제한 가능
  • /etc/cron.allow 파일 존재
    • /etc/cron.deny 파일 존재 유무에 상관 없이 allow 파일에 등록된 사용자만 가능
  • /etc/cron.allow 파일 존재 X
    • /etc/cron.deny 파일 존재 : deny 파일에 등록된 사용자만 사용 불가
    • /etc/cron.deny 파일 존재 X : 일반 사용자는 이용 불가. root 사용자만 이용 가능