crontab & .bashrc - TIL #2

날림·2022년 2월 7일
0

TIL

목록 보기
2/7

GCP SQL 써보기 - TIL #1 에 이어서

crontab 활용

라즈베리파이에서 주기적으로 크롤링 코드를 실행시키기 위해서
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

좀 옆으로 기니까 한 부분씩 떼어보면

  1. 0 0-8/4 * * * : 언제 실행 시킬지 정하는 부분입니다
    분(0-59) 시(0-23) 일(0-31) 월(1-12) 요일(0-7) 순서입니다
    0-8/40시부터 8시까지 매 4시간마다 라는 의미입니다
    - 0시에 1번, 4시에 1번, 8시에 1번, 총 3번 동작합니다
    *은 모든 시간을 의미합니다

다시 0 0-8/4 * * *를 해석해보면
매월 매일 0시 0분부터 8시 0분까지 4시간마다 한 번씩
크롤링 코드를 동작시키고 싶다 입니다

  1. /usr/local/bin/python3.9 : 라즈베리파이에 설치된 파이썬의 절대경로입니다
    crontab을 사용할 땐 절대경로를 사용합니다
    라즈베리파이에 파이썬 까는 것도 나름 스토리가 있었는데... 기록할 걸...

  2. /home/pi/yb/crawler/Crawler.py : 동작시킬 파이썬 크롤링 코드입니다

  3. >> /home/pi/log/Crawling/`date +\%Y-\%m-\%d_\%H:\%M:\%S`.log
    3.에서 출력된 내용을 log 파일로 기록하는 부분입니다
    파일 이름에 시간을 넣기 위해
    date +\%Y-\%m-\%d_\%H:\%M:\%S 를 활용하였습니다

  4. 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

켜질 때마다 proxy 자동 켜기

그런데 크롤링하고 DB에 넣을려면
Cloud SQL proxy가 실행되고 있어야 하는데
갑자기 라즈베리파이가 꺼지면
Cloud SQL proxy를 일일히 다시 켜야 됨??????

이건 아닌거 같아서
라즈베리파이 켜질 때마다 특정 프로그램을 실행시키는 방법
열심히 찾아봤습니다

라즈베리파이 부팅시 프로그램(스크립트) 자동 실행시키는 5가지 방법

다양하게 잘 알려주셔서 많이 배웠습니다

검색하면 가장 많이 나오는 방법은

  1. 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 &

한줄 추가해보고 재부팅 시켜봤더니

라즈베리파이 : 응 그런 프로그램 실행 안할거야
왜 없지...

여러가지로 지지고 볶아 봤는데도 안 되서 그 다음으로 나온

  1. ~/.bashrc 파일 수정

sudo nano ~/.bashrc
맨 밑에 실행할 코드를 넣기

위에서 실험한 코드를 그대로 여기 넣고 다시 실행

nohup 이 한 줄 보이더니
프로세스를 확인하면 프록시가 실행되는 것이 보입니다!

뿌듯

profile
항상배우기

0개의 댓글