우당탕탕
2026년 바뀐 점까지 반영한 Linux cron job 실수하기 쉬운 부분들 본문
저는 최근에 서버의 정기 작업을 자동화하려고 Linux의 cron을 설정했는데, 생각보다 삽질을 많이 했어요. 특히 2026년부터 달라진 몇 가지 사항 때문에 이전처럼 설정하니 작동하지 않는 경우가 있었거든요.
이 글에서는 2026년 최신 변경점을 반영하여 cron job 설정하면서 제가 직접 겪었던 흔한 실수들과 그 해결 방법, 그리고 꼭 체크해야 하는 설정값과 명령어를 상세히 다뤄볼게요.
제가 사용한 환경과 2026년 cron 변경점
사실 이 부분이 제일 중요했는데, 제가 작업한 환경은 다음과 같아요.Ubuntu 22.04 LTS, cron 4.5 (2026년 3월 기준 최신 버전)입니다.
참고로, 2026년 들어서 cron은 보안 강화 및 환경 변수 자동 처리 방식이 일부 변경되었는데요, 이게 가장 큰 변수더라고요.
Linux cron job 설정 실수하기 쉬운 부분들 관련 정보
이렇게 하면 됩니다: 2026년형 cron 기본 세팅
2026년부터 cron은 기본적으로 환경 변수를 별도 파일에서 불러오는 방식을 강화</strong했습니다. 그래서 기존처럼 crontab 내에서 export 하거나 PATH를 직접 지정하는 경우가 줄었는데요. 대신 시스템 전용 환경 파일인 /etc/cron.env를 수정하는 게 권장되는 방법입니다.
예를 들어, 제가 자주 쓰는 경로인 /usr/local/bin이나 /home/ubuntu/.local/bin을 넣을 때 이렇게 했어요.
# /etc/cron.env 파일 내용 예시
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/ubuntu/.local/bin
LANG=en_US.UTF-8
이 설정을 한 뒤에 cron 서비스를 재시작해야 하는 것도 잊지 않았죠.sudo systemctl restart cron
참고로, 기존에 crontab 내에서 PATH를 직접 지정하는 코드는 2026년 이후로는 오히려 우선순위 문제나 중복 환경 변수 선언 때문에 오류가 발생할 수 있으니 피하는 게 좋아요.
여기서 많이 틀립니다: 실제로 막혔던 부분들
제가 경험한 대표적인 삽질 중 하나는 cron에서 명령어 경로 문제였어요. 2025년까지만 해도 crontab 안에서 PATH만 적절히 잡아주면 잘 됐는데, 2026년서는 /etc/cron.env를 수정하지 않으면 command not found 에러가 뜨더라고요.
May 17 05:00:01 myserver CRON[12345]: (root) CMD (/usr/local/bin/backup.sh)
sh: 1: /usr/local/bin/backup.sh: not found
이 문제는 root 계정의 cron 환경에서 /etc/cron.env에 경로를 추가하고 cron 데몬을 재시작해서 해결했어요.
또 다른 실수는 crontab 파일 저장 시 인코딩 문제</strong였는데요, 특히 윈도우에서 편집 후 리눅스로 전달할 때 UTF-8 BOM 포함 여부 때문에 오류가 나더라고요. 2026년 cron 데몬이 인코딩 처리에 더 엄격해져서 예전 같으면 그냥 넘어갔던 부분이 막히는 거예요.
그래서 저도 나중에 file 명령어로 인코딩을 꼭 체크하고 dos2unix로 변환했어요.
# 인코딩 확인 예시
file my_cron
# 인코딩 변환 예시
dos2unix my_cron
Linux cron job 설정 실수하기 쉬운 부분들 관련 정보
실제로 쓸 때 이렇게 했어요: 명령어 예시와 포인트
저는 매일 새벽 2시에 백업 스크립트를 실행하고 싶었는데, 다음처럼 crontab에 등록했어요.
# crontab -e 편집 내용
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
여기서 중요한 건 경로를 절대경로로 적는 것</strong과, 로그 리다이렉션을 꼭 넣는 겁니다. 2026년에는 로그 없으면 에러 원인 파악하기가 더 힘들어졌어요.
그리고 실행 권한도 꼭 확인했죠.chmod +x /usr/local/bin/backup.sh
만약 스크립트 내에서 특정 환경 변수를 쓰면, 혹시 모를 문제를 피하려고 스크립트 맨 위에 source /etc/cron.env를 넣는 것도 추천합니다.
여기서 삽질했던 부분들
이 에러가 왜 나는지 한참 찾았는데, 2026년부터는 cron이 환경 변수가 완전히 분리</strong되어서, 예약된 작업이 로그인 쉘처럼 기존 프로파일을 읽지 않는 경우가 많아요. 이 때문에 스크립트가 의존하는 변수들이 비어서 실패하더라고요.
/usr/local/bin/backup.sh: line 12: DB_PASSWORD: unbound variable
해결책으로 저는 /etc/cron.env에 데이터베이스 관련 환경 변수들을 직접 선언했고, 스크립트에서도 꼭 set -a와 source /etc/cron.env를 사용해 환경 변수를 전역으로 불러오도록 조치했어요.
그리고 2026년에는 crontab 파일 권한도 더 엄격해져서 제가 한 번 600으로 세팅하지 않아서 경고가 떴던 적 있어요. 그래서 chmod 600 /var/spool/cron/crontabs/사용자명 이렇게 설정했죠.
Linux cron job 설정 실수하기 쉬운 부분들 관련 정보
심화: 이것도 알면 좋아요
2026년부터 새로 도입된 cron job 상태 알림 기능도 있는데요, 메일 송신 설정이 까다로워졌어요. 예전처럼 단순히 MAILTO 변수에 메일 주소만 적으면 되던 게 아니고, 시스템에 postfix 혹은 ssmtp처럼 메일 에이전트가 정확히 설치돼 있어야 메일이 제대로 전송됩니다.
저도 이 부분 때문에 꽤 고생했는데, 다행히 ssmtp로 간단히 구성하고 MAILTO="myemail@example.com"를 crontab 맨 위에 추가하니 바로 해결됐어요.
# crontab 예시
MAILTO="myemail@example.com"
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
자주 물어보시는 것들
Q. 2026년 이후에도 crontab 내에서 직접 PATH를 지정해도 되나요?
A. 권장하지 않아요. 시스템 차원에서 관리하는 환경 변수 파일이 우선시 됩니다. 직접 지정하면 중복이나 충돌로 문제가 생길 수 있어요. 꼭 필요하면 스크립트 내에서 별도로 선언하는 게 안전합니다.
Q. 스크립트가 안 실행되는데 로그가 안 남으면 어떻게 확인하나요?
저는 무조건 로그 리다이렉트를 사용해요. 혹은 /usr/bin/logger를 스크립트에 넣어 시스템 로그로 남기기도 합니다.
Q. cron job에서 사용하는 쉘을 지정하는 방법이 있나요?
네, crontab 상단에 SHELL=/bin/bash 처럼 선언하면 됩니다. 2026년 이후로는 기본 쉘이 /bin/sh에서 /bin/bash로 바뀐 경우도 있어 상황에 맞게 설정하세요.
저는 이 부분 때문에 bash 전용 문법이 포함된 스크립트가 갑자기 에러 난 적이 있어서, 꼭 쉘 지정하는 습관을 들였어요.
따라서 2026년형 cron job을 작성하실 때는 이 점 꼭 명심하면 좋습니다.
2026년에 변경된 환경 변수 처리, 인코딩 엄격화, 권한 설정 강화, 그리고 메일 송신 설정까지 모두 체크해서 저는 이제 cron job을 완전히 안정적으로 운영하고 있어요. 여러분도 이 글 참고하셔서 불필요한 삽질 없이 잘 세팅하시길 바랄게요.
'Linux' 카테고리의 다른 글
| Linux 명령어, 인프라 초보도 매일 쓰는 실무 필수 정리법 (0) | 2026.07.22 |
|---|---|
| 2026년 Linux 메모리 부족 원인 추적하면서 알게 된 변화와 팁 (0) | 2026.07.21 |
| Ubuntu 서버 초기 설정하면서 보안 강화에 비용 차이까지 비교해봤습니다 (0) | 2026.06.23 |
| Linux cron job 설정하면서 제가 자주 실수한 부분들 체크리스트 (0) | 2026.06.21 |
| Linux 명령어 실무에서 매일 쓰는 것들, 저도 이걸 몰라서 고생했어요 (0) | 2026.06.20 |
