💡 리눅스 서버 관리의 꽃, 크론(Cron) 완벽 활용 가이드
크론(Cron)은 유닉스(Unix) 및 리눅스(Linux) 계열 운영체제에서 특정 시간, 날짜, 또는 주기에 맞춰 정기적으로 스크립트나 명령어를 실행해 주는 백그라운드 데몬(Daemon) 프로세스입니다. 개발자와 시스템 관리자(Sysadmin)는 크론탭(Crontab)이라는 설정 파일을 통해 데이터베이스 백업, 로그 파일 정리(Log Rotation), 정기적인 메일 발송 등의 배치(Batch) 작업을 자동화할 수 있습니다.
1. 실무에서 가장 많이 쓰이는 크론 자동화 사례
- 주기적인 DB 백업: 매일 트래픽이 가장 적은 새벽 시간(예: 새벽 3시)에
mysqldump명령어를 실행하여 서버의 로컬 스토리지나 원격 NAS로 데이터를 백업합니다. - 불필요한 캐시 및 로그 파일 정리: 서버의 디스크 용량이 가득 차서 서비스가 다운되는 것을 막기 위해, 일주일에 한 번씩 오래된 임시 파일이나 시스템 로그를 삭제하는 스크립트를 구동합니다.
- SSL 인증서 자동 갱신: Let's Encrypt와 같은 무료 HTTPS 인증서는 만료 기간이 짧습니다. 설치 환경에 systemd timer나 갱신 작업이 이미 있는지 확인하고 중복 예약을 피하세요. 갱신 로그와 실제 인증서 만료일도 점검해야 합니다.
2. 크론탭 작성 시 서버 관리자가 자주 하는 3가지 실수
크론탭 문법을 맞게 적었음에도 스크립트가 실행되지 않는다면, 십중팔구 아래 3가지 원인 중 하나입니다.
- 환경 변수와 절대 경로 누락: 크론 데몬은 사용자가 직접 터미널에 로그인했을 때의 쉘(Shell) 환경 변수(PATH 등)를 가져오지 않습니다. 따라서 터미널에서는 잘 작동하던 명령어(예:
node,php,python)가 크론에서는 "Command not found" 에러를 냅니다. 항상/usr/bin/node처럼 명령어와 파일의 절대 경로를 명시해야 합니다. - 출력 결과 리다이렉션(Redirection) 처리: 크론 작업이 실행되면서 발생하는 화면 출력(표준 출력, 에러 등)을 처리하지 않으면, 시스템 내부 메일함에 로그가 계속 쌓여 디스크(Inode)를 소진시킬 수 있습니다. 실행 결과를 남기지 않으려면 로그 파일과 보관 정책을 정하세요.
> /dev/null 2>&1는 오류 출력도 없애므로 장애 진단이 어려워질 수 있습니다. - 서버 타임존(Timezone) 설정 오류: 일반적으로 서버 시간대를 따르지만 CRON_TZ 지원 여부와 작업별 설정도 확인해야 합니다. 서버가 글로벌 리전(AWS, GCP 등)에 있어 UTC(협정 세계시)로 설정되어 있다면, 한국 시간(KST)으로 새벽 4시에 실행되길 원할 때 크론탭에는 전날 저녁 7시(19시)로 등록해야 합니다. 반드시
date명령어로 서버 타임존을 확인하세요.
⚙️ 기본적인 크론탭(Crontab) 명령어
crontab -e: 현재 접속한 사용자의 크론탭 설정 파일을 편집(Edit)합니다.crontab -l: 현재 등록된 크론 스케줄링 목록(List)을 화면에 출력합니다.crontab -r: 등록된 모든 크론 설정을 즉시 삭제(Remove)합니다. (주의해서 사용해야 합니다.)