일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Redux
- 웹팩
- npx
- express
- AWS
- cicd
- 성능최적화
- socket.io
- styled-component
- route
- sequelize
- graphql
- 반응형웹
- 포트포워딩
- 정규표현식
- go
- component
- react
- CDN
- typescript
- docker
- scrapping
- javascript animation
- 웹크롤링
- 회고
- Modal
- Recoil
- Today
- Total
프로그래밍 공부하기
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
'기타' 카테고리의 다른 글
Git Branch 전략 (0) | 2021.06.05 |
---|---|
AWS CodeBuild (0) | 2021.05.13 |
[CodeStates Talk Session 후기] 지원에서 합격까지 (0) | 2021.03.13 |
AWS 서버 만들기 2. PuTTy 접속 (0) | 2021.02.01 |
AWS 서버 만들기 1. 생성 (0) | 2021.02.01 |