aws crontab 설정하기
리눅스에는 명령을 주기적으로 반복해서 실행해주는 crontab이라는 명령이 있다. 이 명령은 다양한 곳에 활용될 수 있는데 나는 땅땅마켓 이라는 프로젝트의 물품목록을 리셋시켜주기 위해 사용했다.
1. crontab 설정
1) 할 일 목록 만들기
프로젝트의 물품목록을 리셋시키기 위해서는 Database를 아에 지우고 다시 만든 후 시드를 다시 채워야 했다. 또한 서버에 남아있는 데이터도 지우기 위해 서버도 재실행 시켜주어야 했다. 이렇게 실행해야할 작업이 여러개 있을 때는 셸 스크립트(.sh)로 작성하여 저장한다. 나는 reset.sh라는 이름으로 만들어주었다.
2) crontab 설정
crontab에 대한 설명은 위의 링크로 대체한다. 나의 경우 crontab -e 명령을 사용하여 직접 reset.sh 를 실행하도록 설정해주었으며 에러핸들링을 위해 실행 결과를 log파일로 남겼다.
2. 에러 핸들링
[Permission Denied]
chmod +x reset.sh
셸 스크립트 실행하면 권한이 없다고 거부되는 경우가 있다. 이 경우에는 위처럼 실행권한을 주면 된다.
[Unable to resolve sequelize package in /home/ubuntu]
0 8 * * 5 cd /home/ubuntu/code && reset.sh >> /home/ubuntu/log/crontab.log 2>&1
실행 되었지만 위와 같이 package를 찾을 수 없다는 오류가 발생할 수 있다. npx sequelize-cli는 package.json이 있는 폴더에서 실행해야하는데 crontab의 working directory가 기본적으로 /home/ubuntu로 정해져 있기 때문에 오류가 나는 것이다. 실제로 /home/ubuntu에서 npx sequelize-cli 하면 동일한 오류가 발생한다.
이 때는 위와 같이 디렉토리를 이동한 후 reset.sh를 실행하도록 변경하면 된다.
처음에 이 오류를 봤을 땐 내 EC2 내의 npx가 /user/bin이 아니라 /home/ubuntu/.nvm 안에 있어서 숨겨진 파일이라 못찾나? 생각이 들어 /user/bin에 심볼릭 링크도 만들고, 환경변수도 지정하고 별 짓을 다했는데 그냥 명령어에 같이 쓰면 되는 것을 알고 조금 허망했다..
unix.stackexchange.com/questions/38951/what-is-the-working-directory-when-cron-executes-a-job