← 문제 라이브러리
Linux 입문 LINUX-010 · 15분

매출 리포트 스크립트가 손으로 돌리면 되는데 cron에서는 DB 접속 실패

매일 아침 7시에 cron으로 도는 매출 리포트 스크립트가 이번 주 월요일부터 실패하고 있습니다.

검수된 문제무료
시나리오

매일 아침 7시에 cron으로 도는 매출 리포트 스크립트가 이번 주 월요일부터 실패하고 있습니다. 담당자가 서버에 로그인해 같은 스크립트를 직접 실행하면 리포트가 잘 만들어집니다. 지난주 금요일에 DB 접속 정보를 스크립트 안에서 빼서 계정의 환경 변수로 옮기는 정리를 했습니다. DBA는 DB에 아무 문제가 없다고 하고, 담당자는 cron이 멈춘 것 같다며 cron 서비스를 재시작하려고 합니다. 리포트가 오전 회의 자료로 쓰여 매일 아침 영업팀이 기다립니다.

단서
crontab -l · 실행 로그
0 7 * * * /opt/report/run.sh >> /var/log/report.log 2>&1

[07:00:01] start daily sales report
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
스크립트와 계정 설정
# /opt/report/run.sh (일부)
psql "$REPORT_DB_URL" -f /opt/report/daily.sql -o /tmp/daily.csv

$ grep REPORT_DB_URL ~/.bash_profile
export REPORT_DB_URL="postgresql://[email protected]:5432/sales"

과제 원인을 좁히고, 서비스를 되살리는 순서(검증 포함)와 재발 방지책을 적어 보세요.

먼저 볼 것
  • 로그인 셸과 cron이 불러오는 환경의 차이
  • 값이 비었을 때 프로그램이 어떻게 동작하는지
점검 체크리스트
  1. cron 로그에서 스크립트가 실행됐는지와 실패 지점
  2. 필요한 환경 변수가 어디서 정의되는지(.bash_profile 등)
  3. env -i 로 빈 환경에서 스크립트를 실행해 재현