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