우당탕탕
Linux cron job 설정하면서 제가 자주 실수한 부분들 체크리스트 본문
사실 저는 cron job 설정할 때마다 꼭 한두 가지씩 실수하곤 했거든요. 간단한 설정인데도 막상 운영 환경에 적용하면 의도한 대로 안 돌아가서 당황했던 경험이 많았어요. 이번에는 그런 실수들을 확실히 줄이려고 ‘꼭 확인할 것들’을 정리해 봤습니다.
이 글에선 저도 막히고 해결했던 부분들을 중심으로, cron job 설정 단계별 체크리스트를 제공할 거예요. 명령어 하나하나, 환경 변수, 권한 문제 등 놓치기 쉬운 점들을 구체적으로 설명할테니 끝까지 읽으시면 분명 도움이 될 거예요.
개발 환경 / 버전 정보
제가 테스트했던 환경은 주로 Ubuntu 22.04 LTS와 CentOS 7 위주였어요. 기본적으로 cron 3.0pl1 버전에서 작업하셨다면 크게 다르지 않을 거예요.
이렇게 하면 됩니다: cron job 기본 설정 체크리스트 ✅
사실 이 기본 단계에서부터 실수하는 분들이 많더라고요. 저도 처음엔 환경변수 문제로 스크립트가 안 돌아간 적이 있었어요.
- 시간 포맷 확인: cron 시간 설정은
분 시 일 월 요일순서에요. 특히요일을 0~7 (0,7은 일요일)로 쓰는 것 헷갈릴 수 있으니 꼭 확인하세요. - 경로 지정: 스크립트나 커맨드에 절대 경로를 사용하는 게 좋아요. 환경 변수
PATH가 제한적이어서 명령어 인식 실패하거든요. - 실행 권한: crontab에 등록된 스크립트는 실행 권한이 반드시 있어야 해요.
chmod +x script.sh확인하세요. - 로그 남기기: 문제 발생 시 확인을 쉽게 하려고 표준 출력과 에러를 로그 파일로 리디렉션하는 게 좋아요.
- 환경 변수 설정: cron은 일반 터미널 환경과 달라서
PATH,HOME등 기본 환경 변수를 명시해주는 것이 중요해요.
아래처럼 cron 파일에 환경변수 선언을 넣고, 로그를 남기는 방식으로 설정하면 문제 파악이 훨씬 쉬워져요.
# 환경 변수 설정
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 매일 새벽 3시에 스크립트 실행 (출력과 에러 로그 파일로 저장)
0 3 * * * /home/ubuntu/scripts/backup.sh >> /home/ubuntu/logs/backup.log 2>&1
저는 이 부분에서 로그 경로를 잘못 적어서 아예 로그 파일이 안 만들어진 적도 있었거든요. 경로가 정확한지 꼭 확인하세요.
여기서 많이 틀립니다: 자주 실수하는 환경 변수 문제
cron은 기본 쉘 환경과 다르게 빈약한 환경 변수로 실행됩니다. 제가 겪은 실수 중 가장 빈번한 게 PATH가 부족해서 명령어를 못 찾는 경우였어요.
예를 들어 크론에서 python3를 실행시키는데 아래처럼 하면 에러가 나요.
# 잘못된 예
* * * * * python3 /home/ubuntu/scripts/job.py
이럴 땐 which python3 명령어로 절대 경로를 확인해서 크론에 적어주는 게 안전해요.
$ which python3
/usr/bin/python3
# cron에 이렇게 넣기
* * * * * /usr/bin/python3 /home/ubuntu/scripts/job.py >> /home/ubuntu/logs/job.log 2>&1
저는 처음에 환경 변수 안 넣고 실행하다가 원인을 몰라 몇 시간 헤맸던 기억이 나네요.
저는 이 방법 썼어요: 권한과 사용자 문제 해결
보통 crontab -e 명령어로 사용자 크론을 편집하는데요, 루트 사용자와 일반 사용자의 환경이 달라서 혼동하기 쉽습니다.
특히 스크립트가 파일에 접근 권한이 없을 경우, 크론에서 실행해도 동작하지 않는 문제가 발생하더라고요.
그래서 저는 항상 아래 체크를 합니다:
- 크론을 구동하는 사용자가 파일 및 스크립트에 실행 권한 있는지
ls -l로 확인 - 루트 권한이 필요한 작업은 반드시
sudo crontab -e로 루트 크론 설정 - 스크립트 내에 권한 변경 명령어가 필요한 경우
chmod등을 미리 설정
예를 들어, 백업 작업을 루트 권한 없이 실행하면 권한 문제로 실패하기 쉽습니다.
# 루트 크론 예시
# 매일 2시에 루트 권한으로 /usr/local/bin/backup.sh 실행
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
저는 이 부분도 한 번 누락해서 백업이 안 돼서 골머리 썩었던 경험 있어요.
여기서 삽질했던 부분들
실제로 저도 아래와 같은 문제로 한참 헤맸는데요, 기록해두면 누군가 분명 도움 될 거라서 공유합니다.
1. cron 로그 확인 방법 몰라서 문제 원인 파악 못 함
cron 작업 실패하면 가장 먼저 보게 되는 로그파일이 /var/log/syslog (또는 /var/log/cron)인데요, 여기에 접근 권한이 없으면 로그도 못 봐서 삽질했어요.
$ sudo grep CRON /var/log/syslog
Apr 17 03:00:01 ubuntu CRON[12345]: (ubuntu) CMD (/home/ubuntu/script.sh)
저는 보통 이 로그에서 'permission denied'나 'command not found'가 자주 보였는데, 그걸 통해 문제 원인을 찾았어요.
2. 스크립트 내 상대경로 사용으로 파일 미발견
크론은 절대 현재 디렉토리가 사용자의 홈이나 스크립트 위치가 아니어서 상대경로(./file.txt)를 쓰면 작동 안 했어요.
그래서 저는 스크립트 맨 위에 cd /home/ubuntu/workspace를 꼭 넣거나 절대 경로만 쓰도록 신경 썼습니다.
심화: 이것도 알면 좋아요
조금 더 나아가서, 저는 cron job 디버깅을 위해 아래와 같이 옵션을 활용해봤어요.
- MAILTO 변수 설정: 실패 시 이메일 알림 받게 하기. 예:
MAILTO=내이메일@example.com - 쉘 명시: cron 명령어 앞에
SHELL=/bin/bash선언으로 bash 스크립트가 제대로 해석되도록 설정 - crontab 시간대(TZ) 지정: 서버 시간대가 다를 때 명확히 하기 위해
TZ=Asia/Seoul같이 TZ 변수 사용
이렇게 하면 시간 오차 없이 안정적으로 백그라운드 작업을 돌릴 수 있었어요.
자주 물어보시는 것들
Q. cron 스크립트 내에서 bash 스크립트가 안 돌아요. 어떻게 해야 할까요?
A. 크론은 기본 쉘이 /bin/sh일 수 있어요. 만약 bash 문법을 썼다면 크론 파일 상단에 SHELL=/bin/bash를 추가하거나, 스크립트 맨 위에 #!/bin/bash를 꼭 넣으세요.
Q. cron job 실행 결과가 궁금해요. 출력 결과를 어떻게 확인할 수 있나요?
A. cron 작업 후 출력 결과를 파일로 리디렉션하거나 메일로 받을 수 있어요. 예를 들어 >> /var/log/myjob.log 2>&1처럼 쓰거나, MAILTO=you@example.com를 설정하면 작업 실패 시 메일 알림을 받을 수 있습니다.
이렇게 하나씩 체크하고 수정하다 보면 cron job이 안정적으로 잘 동작하는 걸 경험하게 될 거예요. 저도 이런 실수를 거치면서 점점 노하우가 쌓였는데, 여러분도 꼭 참고하세요.
'Linux' 카테고리의 다른 글
| Ubuntu 서버 초기 설정하면서 보안 강화에 비용 차이까지 비교해봤습니다 (0) | 2026.06.23 |
|---|---|
| Linux 명령어 실무에서 매일 쓰는 것들, 저도 이걸 몰라서 고생했어요 (0) | 2026.06.20 |
| Nginx 리버스 프록시에 SSL 직접 적용해보면서 겪은 이야기 (1) | 2026.06.19 |
| Docker Compose로 개발 환경 통합하며 겪은 2026년 변화와 해결법 (0) | 2026.06.13 |
| SSH 키 관리 실수로 서버 잠겼을 때 비용 차이와 해결법 직접 경험담 (1) | 2026.06.09 |
