쉘에서는 되는 배치 스크립트가 crontab에 걸면 command not found가 납니다
조회 0 · 댓글 0
배치 작업을 cron에 올리는데 같은 스크립트가 터미널에서는 정상 실행되고 cron으로만 실패합니다. 지난번 내부 ALB 붙던 그 서버와 같은 박스입니다.
환경은 Ubuntu 22.04, 야간에 데이터를 말아서 S3로 올리는 쉘 스크립트입니다. 손으로 bash /opt/batch/run.sh 하면 끝까지 잘 돌고 종료코드 0입니다. 그런데 crontab에 등록하면 중간에 멈추고 로그에 아래만 남습니다.
$ crontab -l 10 3 * * * /opt/batch/run.sh >> /var/log/batch/run.log 2>&1 # run.log /opt/batch/run.sh: line 14: aws: command not found /opt/batch/run.sh: line 18: jq: command not found
aws cli는 /usr/local/bin/aws, jq는 거기 같이 깔려 있고 java도 별도 경로에 있습니다. 로그인 쉘에서 which aws 하면 멀쩡히 잡힙니다.
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/deploy/.local/bin $ sudo -u deploy which aws /usr/local/bin/aws
이미 해본 것은 스크립트에 실행권한 부여, 절대경로로 스크립트 호출, shebang을 #!/bin/bash로 명시한 것입니다. 그래도 cron에서만 저 두 명령을 못 찾습니다. 스크립트 본문은 손 안 대고 cron이 같은 환경으로 돌게 맞추고 싶은데, 같은 계정인데 왜 cron에서만 실행 환경이 달라지는지 짚어주실 수 있을까요.
로그인 후 답글을 남길 수 있습니다.