GCP SQL 써보기 - TIL #1 에 이어서
라즈베리파이에서 주기적으로 크롤링 코드를 실행시키기 위해서
crontab
을 사용하였습니다
여기를 많이 참고했습니다
리눅스 크론탭(Linux Crontab) 사용법
[Linux] crontab 설정 및 로그 확인 - O! JAVA
터미널에서 crontab -e
를 입력하고
열리는 nano
창 마지막 부분에 다음과 같이 써줍니다
0 0-8/4 * * * /usr/local/bin/python3.9 /home/pi/yb/crawler/Crawler.py >> /home/pi/log/Crawling/`date +\%Y-\%m-\%d_\%H:\%M:\%S`.log 2>&1
좀 옆으로 기니까 한 부분씩 떼어보면
0 0-8/4 * * *
: 언제 실행 시킬지 정하는 부분입니다0-8/4
는 0시부터 8시까지 매 4시간마다 라는 의미입니다다시
0 0-8/4 * * *
를 해석해보면
매월 매일 0시 0분부터 8시 0분까지 4시간마다 한 번씩
크롤링 코드를 동작시키고 싶다 입니다
/usr/local/bin/python3.9
: 라즈베리파이에 설치된 파이썬의 절대경로입니다
crontab
을 사용할 땐 절대경로를 사용합니다
라즈베리파이에 파이썬 까는 것도 나름 스토리가 있었는데... 기록할 걸...
/home/pi/yb/crawler/Crawler.py
: 동작시킬 파이썬 크롤링 코드입니다
>> /home/pi/log/Crawling/`date +\%Y-\%m-\%d_\%H:\%M:\%S`.log
3.에서 출력된 내용을 log
파일로 기록하는 부분입니다
파일 이름에 시간을 넣기 위해
date +\%Y-\%m-\%d_\%H:\%M:\%S
를 활용하였습니다
2>&1
: File Descriptor (파일 디스크립터)
파일 디스크립터
- 시스템으로부터 할당 받은 파일을 대표하는 0이 아닌 정수 값
- 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스
프로그램이 프로세스로 메모리에서 실행을 시작 할 때, 기본적으로 할당되는 파일 디스크립터들이 있다. 바로 표준 입력(Standard Input), 표준 출력(Standard Output), 표준 에러(Standard Error)이다. 이 들에게 각각 0, 1, 2 라는 정수가 할당되며...
정리하면
0 : 표준 입력
1 : 표준 출력
2 : 표준 에러
2>&1
은 표준 에러를 표준 출력으로 redirect
시킨다는 의미라고 합니다
이걸 안 쓰면 에러 메시지가 화면에 너무 많이 나와 확인이 힘들어서
시간이 되면 이런 식으로 log
파일이 만들어지고
코드 실행 결과도 잘 출력되어 나옵니다
crontab 자체 log를 확인하려면
sudo cat /var/log/syslog | grep cron
그런데 크롤링하고 DB에 넣을려면
Cloud SQL proxy가 실행되고 있어야 하는데
갑자기 라즈베리파이가 꺼지면
Cloud SQL proxy를 일일히 다시 켜야 됨??????
이건 아닌거 같아서
라즈베리파이 켜질 때마다 특정 프로그램을 실행시키는 방법을
열심히 찾아봤습니다
라즈베리파이 부팅시 프로그램(스크립트) 자동 실행시키는 5가지 방법
다양하게 잘 알려주셔서 많이 배웠습니다
검색하면 가장 많이 나오는 방법은
rc.local
파일 수정
sudo nano /etc/rc.local
후
exit 0
위에 실행할 코드를 넣기
그래서 이렇게 하면 되려나 해서
nohup /home/pi/cloud_sql_proxy.linux.arm -instances=INSTANCE_CONNECTION_NAME=tcp:3306 > /dev/null &
한줄 추가해보고 재부팅 시켜봤더니
라즈베리파이 : 응 그런 프로그램 실행 안할거야
왜 없지...
여러가지로 지지고 볶아 봤는데도 안 되서 그 다음으로 나온
~/.bashrc
파일 수정
sudo nano ~/.bashrc
후
맨 밑에 실행할 코드를 넣기
위에서 실험한 코드를 그대로 여기 넣고 다시 실행
nohup
이 한 줄 보이더니
프로세스를 확인하면 프록시가 실행되는 것이 보입니다!
뿌듯