이전 포스팅에서 파이썬 jupyter notebook을 통해 크롤링한 데이터를 주기적인 스케줄로 BigQuery에 적재를 해야하는 필요성을 느끼게 되었고, 방법을 찾아보았다.
그 중에서도 짧은 시간에 학습이 가능한 crontab을 통해 스케줄링 하는 방법을 적용해보았다.
1. 준비
[GCP 메뉴 버튼] -> [Compute Engine] -> [VM 인스턴스]를 통하여 미리 생성해 놓은 Virtual Machine에 접근한다.
그리고 미리 생성해놓은 VM 옆에 SSH 클릭하여 리눅스 콘솔로 접속한다.
그리고 앞서 짜놓은 크롤링 py파일과 json 형태의 key 파일을 각각 업로드한다.
2. 스크립트 수정
앞서 짜놓았던 .py 파일에서는 내 로컬 경로에 있는 json 파일의 경로로 되어있기 때문에 이를 VM상의 경로로 변경해주어야 한다.
그렇기에 파일이 업로드가 된 디렉토리로 들어가서 해당 py 파일을 수정해야 한다.
1. sudo -i
2. cd 다운로드/경로 (디렉토리 이동)
3. ls (파일 리스트 확인)
4. vi 파일명 (파일 편집)
이렇게 까지 완료를 했다면, 본문에 있는 py 파일의 경로를 현재 파일을 업로드 한 디렉토리로 수정해준다
수정 시 필요한 명령어는 다음과 같다
1. i : 문자 insert
2. esc -> : -> wq! : 저장하고 닫기
3. Cronjob
스크립트 수정이 되었다면 이제 본인이 원하는 주기대로 스케줄링을 걸어주면 된다.
which python (현재 VM의 파이썬 경로: 나중에 경로 설정할 때 필요함)
crontab -e (cronjob을 위한 코드 편집)#원하는 스케쥴링 시기 + 파이썬 경로/업로드파일 경로
* * * * * /root/anaconda3/bin/python /home/계정이름/파일명.py
# 매 1분마다 py 파일을 실행
이렇게 간단하게 스케줄링이 끝이 난다.
여기서 * * * * *의 순서는 분(0–59) / 시간(0–23) / 일(1–31) / 월(1–12) / 요일 (0–7) 이다.
3–1. 예제
# 매일 21시에 파일명.py를 실행
0 21 * * 4 /root/anaconda3/bin/python /home/계정이름/파일명.py# 목요일 21시 30분에 파일명.py를 실행
30 21 * * 4 /root/anaconda3/bin/python /home/계정이름/파일명.py# 30분에 한번씩에 파일명.py를 실행
*/30 * * * * /root/anaconda3/bin/python /home/계정이름/파일명.py
추가적으로, 콘솔창에서 cronjob이 정상적으로 작동하고 있는지 확인을 하기 위해서 로그를 남기는 방법이 있다.
* * * * * /root/anaconda3/bin/python /home/계정이름/파일명.py >> /home/계정이름/`date +\%Y\%m\%d\%H\%M\%S`.log 2>&1
해당 방법으로 남기게 된다면 YYYY-mm-dd hh:MM:SS 형태의 log 파일이 스케줄이 돌 때마다 남게 된다. 만약 가장 최신의 crobjob \로그만 남기고 싶다면 > 하나만 붙이면되고, 누적해서 남기고 싶다면 >>를 남기면 된다.
로그가 과도하게 쌓이면 리눅스 퍼포먼스에 영향을 줄 수 있다고 하니, 가끔씩 비워줄 필요가 있을 것 같다.
- 여기서 ‘*’ 은 띄어쓰기를 꼭! 해야한다.
참고
crontab 작성 시 미리 테스트할 수 있는 사이트이다. 무척 유용하게 쓸 수 있을 듯!
크론탭 사용법에 대해 상세하게 올라온 블로그.