리눅스 :: Cron

2025. 8. 8. 13:20백엔드/리눅스

AWS CI/CD 테스트중 개념정리가 필요하여 따로 작성하게 되었다.

 

crontab이란?

crontab(cron table)은 리눅스/유닉스 환경에서 작업을 예약 실행하는 도구

특정 시간/날짜/주기에 맞춰 명령어, 스크립트, 프로그램을 자동 실행

 

용도: 리눅스에서 반복적·정기적 작업을 자동화

장점: 정확한 주기, 가벼운 실행, 사용자별 설정, 안정성

주의점: PATH, 권한, 로그 관리

 

cron: 백그라운드에서 돌아가는 데몬 (스케줄 실행 담당)

crontab: cron의 설정 파일 또는 설정 관리 명령어

 

실행 구조

cron 데몬(crond)이 항상 실행 중

주기적으로 crontab 설정을 확인

조건에 맞는 시간이 되면 해당 명령 실행

실행 결과는 메일이나 리다이렉션 로그로 전달 가능

 


용도

정기적인 작업 자동화

로그 백업         데이터베이스 덤프

캐시 정리         정기적인 배치 처리

모니터링 & 알림         서버 상태 체크 후 메일/SMS 발송

반복적인 관리 작업         주기적 리포트 생성         파일 압축/이동

시간 기반 트리거         하루 한 번, 매주, 매월 특정 시간에만 실행

 

장점

자동화        반복 작업을 사람 개입 없이 실행

정확한 주기 제어         분 단위까지 세밀한 설정 가능

경량         시스템 리소스 거의 사용하지 않음

다양한 범용성         명령어, 쉘 스크립트, 프로그램 모두 실행 가능

사용자별 설정 가능         각 사용자 계정별 독립된 crontab 가짐

신뢰성         리눅스 부팅 시 자동 시작, 서버 환경에서 표준 사용

 

 

활용

절대 경로 사용

cron 환경은 PATH가 제한적이므로 /usr/bin/ls 같은 전체 경로 지정

 

로그 남기기

0 2 * * * /home/ubuntu/backup.sh >> /home/ubuntu/backup.log 2>&1

 

환경 변수 확인

env > /tmp/cron_env.txt

→ cron이 실행되는 환경을 확인 가능

중복 실행 방지: flock 또는 PID 체크 로직 사용

 


명령어

관리 명령어

crontab -e 현재 사용자            crontab 편집

crontab -l 현재 사용자            crontab 목록 출력

crontab -r 현재 사용자             crontab 삭제

crontab -u user 특정 사용자         crontab 관리(관리자 권한 필요)

 

문법

분 시 일 월 요일 명령어

# 매 5분마다 실행
*/5 * * * * /home/ubuntu/check.sh

# 월~금 오전 9시에 실행
0 9 * * 1-5 /home/ubuntu/report.sh

 

* → 모든 값 (와일드카드)

/ → 간격 지정

, → 여러 값 지정

- → 범위 지정

 


 

글을 작성하게 된 계기 (정리)

의문점 1.

contab_new 등으로 복사본을 생성하고 바로 삭제하는 이유 ?

 

개인적으로, 실사용 시에는 cron 에서 주기적 실행하도록 스크립트를 작성하고 그 복사본을 실행 시마다 만든 다음

항상 rm 등으로 바로 삭제하도록 진행하는 것에 대해 의문점이 있었는데

(바로 삭제하도록 스크립트를 짜놓았는데 이럴거면 왜 생성하는 것인가 ?)

 

  cron 실행시 예기치 않은 오류가 발생할 경우를 대비하여 복사본을 생성해 두고, deploy가 정상적으로 완료되면 해당 복사본은 필요가 없어지므로 삭제하는 것으로 이해했다.

 

 

의문점 2.

CI/CD 에서 왜 이 cron이 필요한 것인가?


무중단 배포를 위해서 필요한 것이라고는 하지만 이것이 특정 트리거가 아닌 시간 기반이라면 업데이트가 항상 되지 않는다면 오히려 리소스 낭비가 되는것이 아닐까? 하는 의문점이 있었다.

DB에서 별점계산 등은 리뷰작성등 DML 이 실행되었을때 트리거 등을 통해서 특정 시점에 수행하도록 하는 것처럼

cron도 그러한 용도라고 이해를 했는데 시간 기반인 것은 조금 이해가 가지 않았다.

 

특정 시간에 수행되는 것이 사용자가 가장 적은 시간대이고 자주 일어나지 않을 것이라고 예상되나 이건 진행하면서 검증해봐야 할 것 같다.

진행하다 보니 git repository를 이용하여 커밋 및 푸시를 기준으로 자동 반영되는 것이라면 좋은것이긴 하지만

프로젝트를 하며 예상치 못한 버그를 겪어서, 반대로 LightSail 로 수동배포를 진행했을 때가 처음에는 편한 듯하다.

  물론 이런 문제점들 때문에 테스트코드 작성이 중요한 거겠지만 많은 경험이 쌓이기 전에는 당장 해결되는 문제는 아니니까.

 

 

'백엔드 > 리눅스' 카테고리의 다른 글

리눅스 :: 주변 장치 명령어  (0) 2025.09.08
리눅스 :: 주변 장치 연결 및 설정  (0) 2025.09.08
리눅스 :: 셸과 환경변수  (0) 2025.09.07
리눅스 :: 파일시스템  (0) 2025.09.07
리눅스 :: 에디터  (0) 2025.08.19