리눅스 crontab 실행 안될 때: 비밀번호 만료로 cron 배치가 멈춘 경우
이번에 서버 배치를 모니터링하던 중 예상치 못한 상황을 겪었다. 전날까지 정상적으로 돌던 배치가 08시 이후부터 실행되지 않는 현상이 생긴 것이다. 리눅스 crontab 실행 안될 때 흔히 의심하는 설정이나 스크립트 문제가 아니라 의외의 원인이었기에, 비슷한 문제를 겪는 사람이 있을까 하여 기록으로 남긴다.
처음에는 crontab 설정이나 스크립트 문제라고 생각했지만, 서버에 직접 접속해 보니 다음과 같은 메시지가 나타났다. 계정 비밀번호가 만료된 것이다. 비밀번호 변경 명령어인 passwd는 리눅스 사용자 관리 방법 글에도 정리해 두었다.

Your password has expired.
You must change your password now.crontab 실행 안될 때 원인: 비밀번호 만료
보안을 위해 리눅스 서버에는 일정 기간마다 비밀번호를 바꾸게 하는 비밀번호 만료 정책(password aging)이 걸려 있는 경우가 많다. 비밀번호가 만료되면 로그인할 때 비밀번호 변경을 요구받는 것으로 끝나지 않는다.
cron은 작업을 실행하기 전에 PAM을 통해 계정 상태를 확인하는데, 이 단계에서 만료된 계정은 “새 비밀번호가 필요하다”는 판정을 받아 작업 실행이 거부된다. 그래서 그 계정으로 등록된 cron 작업이 통째로 멈춰 버린다. 실제로 cron 로그를 보면 아래와 비슷한 메시지가 남는다.
grep CRON /var/log/syslogAuthentication token is no longer valid; new one required
CentOS나 RHEL 계열이라면 /var/log/cron 파일을, systemd 환경이라면 journalctl -u cron으로도 확인할 수 있다.
계정의 비밀번호 만료일 확인하기
chage -l 명령어로 해당 계정의 비밀번호가 언제 만료되는지, 최대 사용 기간이 며칠로 설정되어 있는지 확인할 수 있다.
sudo chage -l batchusercrontab 실행 안될 때 해결 방법
이유가 명확하니 해결 방법도 단순하다.
- 서버에 접속해서 비밀번호를 변경한다(
passwd). - 배치 스크립트가 정상 동작하는지 확인한다.
- 놓친 시간대의 배치가 있다면 필요할 때 수동으로 실행한다.
sudo passwd batchuser
배치 전용 계정처럼 사람이 로그인하지 않는 계정이라면, 회사 보안 정책이 허용하는 범위 안에서 비밀번호 만료를 꺼 두는 방법도 있다. 다만 보안 정책을 바꾸는 일이니 반드시 관리자와 협의한 다음에 적용하자.
sudo chage -M -1 batchusercrontab의 시간 형식, 기본 명령어, PATH와 % 이스케이프 같은 기초 설정은 리눅스 crontab 사용법 글에 따로 정리해 두었다. 처음 cron을 설정한다면 먼저 보고 오자.
crontab 실행 안될 때 함께 확인할 것
이번 경험을 통해 알게 된 것은 crontab이 실행되지 않는 원인이 단순한 스크립트 문제가 아닐 수도 있다는 점이다. 만약 cron 배치가 갑자기 돌지 않는다면 아래 항목을 차례로 확인해 보자.
- cron 서비스 상태:
systemctl status cron으로 서비스가 살아 있는지 본다. 서비스 관리는 리눅스 서비스 관리 글을 참고하자. - 계정 상태: 비밀번호 만료, 계정 잠금, 로그인 제한 정책에 걸리지 않았는지 확인한다.
- 환경 변수: cron은 로그인 셸과 PATH가 달라서, 터미널에서 되던 명령이 cron에서는 안 될 수 있다. 명령어는 절대 경로로 쓰는 것이 안전하다.
- 실행 권한: 스크립트에 실행 권한(
chmod +x)이 있는지 확인한다. - 특수 문자: crontab 안에서
%는 줄바꿈으로 해석되므로\%로 써야 한다. - 출력 로그: 작업 뒤에
>> /tmp/job.log 2>&1을 붙여 실행 결과를 파일로 남겨 두면 원인을 찾기 쉽다.
crontab 문법 자체가 헷갈린다면 crontab 매뉴얼 페이지에서 시간 필드 규칙을 확인할 수 있다.
마무리
리눅스 서버에서 crontab 실행 안될 때 스크립트만 들여다보고 있으면 이번처럼 한참 헤맬 수 있다. 로그 한 줄, 계정 상태 하나만 먼저 확인했어도 금방 찾을 수 있는 원인이었다. 비밀번호 만료 정책이 있는 서버라면 배치 계정의 만료일을 미리 확인해 두는 습관을 들이자.
첫 댓글을 남겨보세요