ubuntu에서 crontab이 작동되지 않는 이슈 발생
이슈상황
최근 서버 환경이 GCP에서 aws로 바뀌면서 서버를 새로 설정해야하는 이슈가 생겼다. 그러면서 해당 서버들의 로그들을 백업하는 스크립트를 생성 후 crontab으로 실행되게 설정을 했다.
그런데 분명 서버에 접속해서 cli로 실행 될때는 crontab이 잘 되는데 스크립트로 crontab을 배포 하면 실행이 되지 않았다.
crontab 설정 방식
1. crontab 파일과 crontab으로 실행될 스크립트를 다운받는 스크립트를 하나 생성 - install.sh 로 명명
2. crontab을 설정할 서버에서 install.sh를 실행하여 미리 만들어놓은 crontab 파일을 /var/spool/cron/crontab 에 복사
3. systemctl restart cron으로 cron.service 재시작
허나 나의 방식으로 하면 계속 되지 않았고 cron로그를 따로 빼서 관리해보니 스크립트가 실패한게 아닌 cron이 아예 안돌았다.
크론탭 설치 파일
sudo mkdir /root/cron
aws s3 cp s3://스크립트위치/crontab-file /root/cron
aws s3 cp s3://스크립트위치/스크립트1.sh /root/cron
sudo chmod +x /root/cron/스크립트1.sh
sudo mv /root/cron/crontab-file /var/spool/cron/crontabs/root
sudo systemctl restart cron
sudo rm /root/install.sh
대표적인 crontab이 안도는 이슈
1. 시간 설정이 잘못된 경우 * * * * * 의 설저이 잘못된 경우
2. 실행 스크립트를 상대경로로 적은 경우
대부분 위와 같은 이유를 말한다. 허나 난 모두 해당사항이 없었다.
원인을 찾아보니
cron[198016]: (CRON) INFO (pidfile fd = 3)
cron[198016]: (root) INSECURE MODE (mode 0600 expected) (crontabs/root)
cron[198016]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
crontab으로 파일은 설정할때 권한이 600 이었는데 나는 옮긴 후 확인하니 644였고 그래서 mode 0600 expected 에러가 발생했다.
수정 후 정상 작동 되는 크론탭 설치 파일
sudo mkdir /root/cron
aws s3 cp s3://스크립트위치/crontab-file /root/cron
aws s3 cp s3://스크립트위치/스크립트1.sh /root/cron
sudo chmod +x /root/cron/스크립트1.sh
sudo mv /root/cron/crontab-file /var/spool/cron/crontabs/root
# 이부분 추가
sudo chmod 600 /var/spool/cron/crontabs/root
sudo systemctl restart cron
sudo rm /root/install.sh
위처럼 sudo chmod 600 /var/spool/cron/crontabs/root 를 추가하니 정상작동 되었다. aws에서 이렇게 스크립트를 받아서 crontab을 관리하는 경우 에러날때 참고하세요!