syurhia 님의 블로그

리눅스 CRON 본문

IT학습_보안외/리눅스

리눅스 CRON

syurhia 2026. 6. 11. 19:29

리눅스의 /etc 디렉터리에는 crontab이라는 파일과 cron.daily, cron.hourly, ...라는 폴더들이 존재한다. 

 

그림 1. cron파일들(폴더 포함)

 

이번에는 그림 1의 빨간색 부분으로 된 이 파일들이 무엇을 하는 파일인지, 어떻게 쓰는건지에 대해 설명해보려 한다.

 

CRON의 개념

 

딱딱한 설명으로는 "주기적으로 반복되는 특정 태스크나 스크립트를 지정된 시간에 자동 백그라운드 프로세스로 실행하기 위해 가동되는 시계열 기반의 시간 기반 잡 스케줄러 데몬"을 의미한다고 한다.

 

근데 이런 설명으로는 와닿지 않는다. 좀 더 쉽게 설명을 해보겠다.

백신 프로그램(예를 들면 V3라던지)을 보면 어떠한 주기로 자동으로 검사를 하게 설정을 할 수 있다. 예를 들면 1주일마다 한 번씩 알아서 PC의 바이러스를 진단한다던지 말이다. 다만, 이건 백신 검사만 자동으로 된 것이고, 내가 만든 프로그램이나 스크립트들을 1주일이나 매일매일 자동으로 돌리고 싶다고 해보자. 그 때 쓰는 것이 CRON이라는 소프트웨어(백그라운드에서 자동으로 실행되는 프로세스임)이다. CRON에 주기적으로 반복해서 작동될 프로그램들을 써 넣으면 얘가 알아서 실행시켜준다.


사용 예시

 

나의 경우에는 대학교에서 실습 수업 들을 때, crontab에 모든 파일을 5분 주기로 암호화 해버리는 스크립트 파일 경로가 적혀 있었다. 이로 인해, 바탕화면 및 다른 주요 디렉터리에서 파일을 만들면 열어봤을 때 읽을 수 없는 상황을 보게 됐었다.

 

기본적으로 사용을 위해서는 /etc/crontab이라는 파일에 내용을 적어넣어야 한다. 그림 2는 crontab을 열어본 것이다.

그림 2. crontab 파일 내용

그림 2를 보면, "분, 시간, 날짜, 월, 요일"을 적은 뒤, "실행하고 싶은 유저"를 적은 뒤, "커맨드 내용"을 적으라고 적혀 있다.

커맨드 내용에는 셸에 쓰는 커맨드 ls, cat, ...와 같은 것들을 직접 써도 되고, 파일명을 적어도 된다.

여기에 "run-parts cron.daily"를 적어놓으면 cron.daily폴더에 있는 모든 스크립트와 프로그램을 실행시키라는 뜻이다. 이렇게 한번에 실행시키는 것이 가능하다.

"0 10 1 * * root run-parts cron.daily"로 적어놓으면 매달 1일 오전 10시에 cron.daily폴더의 모든 실행파일을 실행시키라는 뜻이다. 


사용방법

 

"crontab -e" : 내 계정의 크론 장부를 편집기로 여는 명령어이다.(내 계정이라 적은 이유는, 각 유저마다 부여된 권한에 따라 크론에 자동화를 요구할 수 있기 때문에 나눠져 있다.) (무언가를 예약하면 그 뒤에 crond프로세스를 재부팅해줘야 한다.)

 

"crontab -l" : 내 계정에 등록된 크론 장부 예약 목록 확인

 

"crontab -r" : 등록된 모든 예약 지우기

 

그런데 이렇게 하는 것 보다는 /etc/crontab을 수정하는 게 좀 더 편하다. -e는 vi로 수정하는건데 좀 불편하니까 nano같은걸로 직접 열어서 수정하는 걸 추천한다.

적을 때는 "분, 시간, 날짜, 월, 요일 실행유저이름 커맨드내용" 이렇게 적으면 된다. 매주 또는 매 시간같이 아무때나 적용하고 싶으면 *을 쓰고 정확한 타이밍이 존재한다면 그 곳에만 값을 적어주면 된다.

 

요일은 0~6의 값을 적어야 되는데 정확한건 "cat crontab"을 하면 어떻게 적어야 되는지 파일에 설명이 적혀있다.


비슷한 친구

 

at이라는 애가 cron과 비슷하다. cron은 주기적으로 계속해서 반복하지만 at은 한 번만 하고 끝낸다.

"at 시간 날짜" 이렇게 적어놓고 Enter를 누른 뒤, 예약할 명령어를 입력해주면 된다.

 

 


추가 설명

 

그림 1의 cron.d, cron.daily, cron.deny, cron.hourly, cron.monthly, crontab, cron.weekly에 대해 설명해보고자 한다.(까먹을뻔)

 

cron.deny는 블랙리스트다. 여기에 적힌 유저는 crontab을 건드릴 수 없다.

 

cron.hourly는 이 폴더에 스크립트나 프로그램을 넣어두면 매시간 자동으로 시작해준다. crontab에 적혀있지 않아도 말이다. 그 이유는, /etc/cron.d/0hourly에 적혀있기 때문이다. 그림 3을 보면 알 수 있다. crontab이 아니라 /etc/cron.d/0hourly에 적혀있다. 물론 crontab에 적어놔도 되긴 했다.

그림 3. cron.hourly가 자동으로 되는 이유

 

cron.daily, cron.weekly, cron.monthly는 매일, 매주, 매달을 주기로 자동으로 스크립트와 프로그램을 실행시켜주는 폴더들이다. 얘네는 crontab에 안 적혀 있지만, anacrontab이란 곳에 자동으로 실행시켜달라고 적혀 있다(내가 안 적었어도 기본적으로 적혀져 있다). 그림 4를 보면 알 수 있다.

그림 4. anacrontab

굳이 crontab에 안 적고 cron.d랑 anacrontab에 나눠서 적혀져 있는 이유는 나도 잘 몰라서...찾아봤더니 다음과 같다고 한다.

 

과거에는 crontab에 전부 다 적어놨는데, 서로 텍스트가 꼬이고 스케줄러 장부가 마비되는 병목이 터져서, 프로그램이 설치될 때, 서로 간에 장부를 건드리지 못하게 cron.d로 나눠놨다고 한다. 그래서 MySQL을 설치하면 /etc/cron.d/mysql과 같이 생기는 모양이다.

anacrontab은 컴퓨터를 꺼놓는 경우에 monthly나 daily작업들을 실행 못하는 경우들이 발생해서, anacron이 컴퓨터가 꺼져서 자동으로 작업을 못해줬으면 그걸 확인하고 밀린 작업을 실행시켜준다고 한다.(읽어보니 납득이 된다. 1달에 한 번 하는 백업을 서버를 그 시간에 꺼서 못 했다고 한다면 말도 안되는 큰 사고니까..)

'IT학습_보안외 > 리눅스' 카테고리의 다른 글

리눅스 네트워크 설정  (0) 2026.06.12
리눅스 마운트 개념 정리  (0) 2026.06.09