cron 작업이란? 리눅스 자동화의 기본

작성자

카테고리:

cron의 개념

cron은 리눅스 및 유닉스 시스템에서 특정 시간에 명령어나 스크립트를 자동으로 실행하는 작업 스케줄러다. 서버 운영에서 반복적으로 수행해야 하는 작업은 끝없이 많다. 로그 정리, 데이터베이스 백업, 시스템 업데이트 확인, 모니터링 스크립트 실행, 캐시 초기화 등이 대표적이다. 이런 작업을 관리자가 매번 수동으로 실행하면 누락과 실수가 불가피하다. cron은 이 문제를 해결하는 리눅스 서버 운영의 기본 도구다.

crontab 문법

cron 작업은 crontab(cron table) 파일에 정의한다. crontab -e 명령어로 편집하고 crontab -l로 현재 등록된 작업을 확인한다. 각 줄은 하나의 작업을 정의하며, 5개의 시간 필드와 실행할 명령어로 구성된다. 시간 필드는 왼쪽부터 분(0-59), 시(0-23), 일(1-31), 월(1-12), 요일(0-7, 0과 7 모두 일요일)이다. 예를 들어 매일 새벽 3시에 백업 스크립트를 실행하려면 0 3 * * * /home/user/backup.sh라고 작성한다. 별표(*)는 해당 필드의 모든 값을 의미하고, 슬래시(/)는 간격을 지정한다. */5 * * * *는 5분마다 실행을 의미한다.

실무 활용 예시

가장 흔한 활용은 데이터베이스 백업 자동화다. 매일 새벽 2시에 mysqldump로 백업 파일을 생성하고, 7일 이상 된 백업 파일을 자동 삭제하는 스크립트를 cron에 등록한다. 로그 압축과 정리도 cron의 단골 업무다. logrotate가 내부적으로 cron을 통해 동작하며, 커스텀 로그 관리가 필요하면 별도 스크립트를 등록한다. SSL 인증서 자동 갱신도 cron을 활용한다. Let’s Encrypt의 Certbot은 갱신 명령어를 cron에 등록하여 인증서 만료 전 자동으로 갱신을 시도한다. 서버 상태를 주기적으로 체크하여 이상 시 알림을 보내는 헬스체크 스크립트도 cron으로 자동화한다.

주의사항

cron 작업 설정 시 자주 발생하는 실수들이 있다. 첫째, 환경 변수 문제다. cron은 사용자의 셸 환경을 상속하지 않는다. 로그인 셸에서는 잘 동작하던 스크립트가 cron에서 실패하는 가장 흔한 원인이다. 스크립트 내에서 필요한 환경 변수를 명시적으로 선언하거나, 명령어를 절대 경로로 작성해야 한다. 둘째, 출력 관리다. cron 작업의 표준 출력과 표준 에러가 처리되지 않으면 시스템 메일로 쌓인다. 출력을 로그 파일로 리다이렉트하거나 /dev/null로 버리는 처리가 필요하다. 셋째, 중복 실행 방지다. 이전 실행이 끝나지 않았는데 새 실행이 시작되면 충돌이 발생할 수 있다. flock 명령어로 락 파일을 잡아 동시 실행을 방지하는 것이 안전하다.

systemd 타이머와의 비교

최신 리눅스 배포판에서는 systemd 타이머가 cron의 대안으로 부상하고 있다. systemd 타이머는 서비스 유닛과 타이머 유닛을 분리하여 관리하며, 부팅 후 경과 시간 기반 스케줄링, 의존성 관리, 로그 통합(journald)이 가능하다. 다만 설정이 crontab보다 복잡하고, 단순 반복 작업에는 cron이 여전히 직관적이라 양쪽 모두 실무에서 활발하게 사용되고 있다.

cron #crontab #리눅스자동화 #서버자동화 #백업자동화 #스케줄러 #systemd타이머 #셸스크립트 #서버운영 #리눅스기초

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다