우당탕탕

2026년 바뀐 점까지 반영한 Linux cron job 실수하기 쉬운 부분들 본문

Linux

2026년 바뀐 점까지 반영한 Linux cron job 실수하기 쉬운 부분들

모찌모찝 2026. 7. 19. 20:39

저는 최근에 서버의 정기 작업을 자동화하려고 Linux의 cron을 설정했는데, 생각보다 삽질을 많이 했어요. 특히 2026년부터 달라진 몇 가지 사항 때문에 이전처럼 설정하니 작동하지 않는 경우가 있었거든요.

이 글에서는 2026년 최신 변경점을 반영하여 cron job 설정하면서 제가 직접 겪었던 흔한 실수들과 그 해결 방법, 그리고 꼭 체크해야 하는 설정값과 명령어를 상세히 다뤄볼게요.

제가 사용한 환경과 2026년 cron 변경점

사실 이 부분이 제일 중요했는데, 제가 작업한 환경은 다음과 같아요.
Ubuntu 22.04 LTS, cron 4.5 (2026년 3월 기준 최신 버전)입니다.
참고로, 2026년 들어서 cron은 보안 강화 및 환경 변수 자동 처리 방식이 일부 변경되었는데요, 이게 가장 큰 변수더라고요.

Linux cron job 설정 실수하기 쉬운 부분들 관련 이미지

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 설정 실수하기 쉬운 부분들 직접 정리한 자료

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 -asource /etc/cron.env를 사용해 환경 변수를 전역으로 불러오도록 조치했어요.

그리고 2026년에는 crontab 파일 권한도 더 엄격해져서 제가 한 번 600으로 세팅하지 않아서 경고가 떴던 적 있어요. 그래서 chmod 600 /var/spool/cron/crontabs/사용자명 이렇게 설정했죠.

Linux cron job 설정 실수하기 쉬운 부분들 참고 사진

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을 완전히 안정적으로 운영하고 있어요. 여러분도 이 글 참고하셔서 불필요한 삽질 없이 잘 세팅하시길 바랄게요.

Comments