[MAC] Crontab(크론탭)으로 파이썬을 특정 주기 자동 실행시키기

SHORTCUT

    반응형

    Cron? Crontab?

    • 크론(Cron) : 유닉스(Unix)와 리눅스(Linux) 환경에서 사용자가 설정한 시간에 특정 작업을 수행하도록 만든 명령 파일
    • 크론탭(Crontab) : 위의 Cron이 언제 어떤 일을 하는지 설정한 파일
    • 쉽게 생각하면 윈도우의 스케줄러같은 녀석이라 생각하면 됩니다!

    만들고자 하는 것

    • 나는 매일 저녁 10시에 티스토리로 내가 작성한 글을 자동으로 비공개 발행해주고, 매일 아침 8시에 발행한 글을 공개 발행하는 크론탭을 생성하고자 한다.

    크론탭 설정 방법

    크론탭 작성 방법!

    🔒
    본 실행은, MAC OS 에서 이루어졌습니다 *Window 사용자는, 윈도우 스케줄러를 사용하시면 됩니다.
    🖐️
    본문에선 크론탭을 만들어 파이썬 코드를 실행하는 과정만 neat하게 기술하였습니다!
    1. 터미널을 연 뒤, 아래 과정을 실행한다. *필자는 zsh 를 사용했다.
    1. crontab -e : 에디터를 통해 크론탭을 생성한다.
      • 위의 명령어를 치면, vi(vim) 편집기가 실행된다.
      • 만약 등록된 크론탭이 없다면 새로 파일을 만들어 주고, 있다면 편집하도록 해준다.
      • 만약 등록이 안된다면, 관리자 권한으로 실행해본다. sudo crontab -e
    1. vi 편집기에서, i 혹은 a를 눌러 작성을 시작한다.
      • i : 현재 커서 위치부터 입력 시작 (이걸로 하고 키보드로 커서를 움직이면 됩니다)
      • a : 현재 커서의 위치 다음 칸부터 입력
    1. {시간 셋팅} {파이썬 경로} {실행할 파일 경로} {(선택)로그 경로} 의 형태로 작성한다.
      ⚠️
      크론탭은 공백을 기준으로 구분되며, 한 줄엔 하나의 명령어(cron job, 행동)만 입력해야 한다. # 는 vi 편집기에서 사용하는 주석이다!
      • {파이썬 경로}
        • 절대 경로로 입력한다.
        • 터미널에 which python3 를 입력하여, 경로를 반환받아 활용한다.
      • {실행할 파일 경로}
        • 절대 경로로 입력한다.
      • {로그 경로 2>&1}
        > {저장할 로그파일 경로} 2>&1
        
        # > : 하나의 로그를 갱신하여 기록
        # >> : 계속 파일을 생성하며 누적할 경우
        • 저는 하루에 2번 실행되는 결과를 확인하기 위해, >> 계속 누적되는 형식으로 하고자 하였습니다.
        • 파일명을 log_`date +\%Y\%m\%d`_`date +\%H\%M\%S`.log 으로 설정하였고, log_20220809_231800.log 이런 형식의 로그 파일이 생성되었습니다.
    1. 테스트를 위해, 아래처럼 크론탭을 생성하였다.
      #테스트 크론탭(10분 간격으로 실행 테스트)
      10 * * * * /Users/jacob/opt/anaconda3/bin/python3 /Users/jacob/{경로}/main.py >> /Users/jacob/{경로}/logs/log_`date +\%Y\%m\%d`_`date +\%H\%M\%S`.log 2>&1
      # {시간 셋팅} {파이썬 경로} {실행할 파일 경로} >> {로그 경로/로그명.log 2>&1}
    1. 작성을 완료한 이후, vi 편집기를 저장하여 빠져나와야 한다.
      1. esc 키를 눌러, 편집 모드에서 나온다.
      1. :wq 를 입력하여, 저장 후 나온다.
    1. crontab -l : 등록되어 있는 크론탭 리스트를 확인해본다.
    1. 지정한 시간이 되면 동작한다. 로그까지 확인해보자.

    실전! 상황에 맞추어 작성하기

    • 나는 매일 저녁 10시에 티스토리로 내가 작성한 글을 자동으로 비공개 발행해주고, 매일 아침 8시에 발행한 글을 공개 발행하는 크론탭을 생성하고자 한다.
      • 매일 22시에 main.py 실행 → 0 22 * * * 매일 08시에 main.py 실행 → 0 8 * * *
    #매일 08시에 티스토리 비공개 발행
    0 8 * * * /Users/jacob/opt/anaconda3/bin/python3 /Users/jacob/{경로}/main.py >> /Users/jacob/{경로}/logs/log_`date +\%Y\%m\%d`_`date +\%H\%M\%S`.log 2>&1
    
    #매일 22시에 티스토리 공개 발행
    0 22 * * * /Users/jacob/opt/anaconda3/bin/python3 /Users/jacob/{경로}/main.py >> /Users/jacob/{경로}/logs/log_`date +\%Y\%m\%d`_`date +\%H\%M\%S`.log 2>&1
    로그를 확인해보면 파이썬 실행 결과가 적혀있음을 확인 할 수 있다! 만세!

    에러 정리

    1. 로그에서, Permission denied 가 나온 경우
    1. 로그에서, Operation not permitted 가 나온 경우
    1. 파이썬 모듈을 찾지 못하는 경우 ModuleNotFoundError
    [MAC] Crontab 오류 정리(Operation not permitted, Permission denied)
    🥸 case1 오류가 발생했다면, case2까지 설정해주어야 크론탭이 정상 동작합니다! :D case1) Permission denied 발생 원인 : 해당 파일의 실행 권한이 없기 때문! 사람이 아닌 컴퓨터가 파일을 실행시키는 것이기..
    https://23log.tistory.com/171
    • 모두 위 포스팅으로 정리해두었습니다! :D

    회고

    💬
    이커머스 업무를 하다보면, 다양한 프로세스 등을 보게 됩니다. 그때 스프링 배치를 처음 보게 되어, 호기심에 이것저것 살펴보다 처음으로 Cron 이란 것을 알게되었습니다. 주로 프론트엔드 단을 맡고 있어서, 직접 배치를 짜거나 스켸줄러를 설정하거나 하진 않았는데. 파이썬 자동 실행 환경을 구성하다가 그때 보았던 크론을 쓰게 될 줄은 몰랐습니다.. 그런데 막상 하나씩 찾아가며 해보니 너무 재밌는 경험이네요. 역시, 사람은 경험을 해봐야 하는 것 같습니다 😎
    💬
    크론이 어떻게 구성되는지 기본 원리나 설정 방식을 이해하고, 빠르게 크론탭 생성 사이트를 활용해서 내가 원하는 것을 만들어내서 시간을 많이 절약할 수 있었습니다. 역시 새로운 것을 활용할 땐, 기본 개념을 이해하고, 내가 원하는 것을 찾아내어 빠르게 적용하는 방식 을 취하는게 효율적이라는 생각을 하며, 오늘을 마무리합니다!

    참고

    반응형

    댓글

    Designed by JB FACTORY