SHORTCUT
반응형
Cron? Crontab?
- 크론(Cron) : 유닉스(Unix)와 리눅스(Linux) 환경에서 사용자가 설정한 시간에 특정 작업을 수행하도록 만든 명령 파일
- 크론탭(Crontab) : 위의 Cron이 언제 어떤 일을 하는지 설정한 파일
- 쉽게 생각하면 윈도우의 스케줄러같은 녀석이라 생각하면 됩니다!
만들고자 하는 것
- 나는 매일 저녁 10시에 티스토리로 내가 작성한 글을 자동으로 비공개 발행해주고, 매일 아침 8시에 발행한 글을 공개 발행하는 크론탭을 생성하고자 한다.
크론탭 설정 방법
크론탭 작성 방법!
- 터미널을 연 뒤, 아래 과정을 실행한다.
*필자는
zsh
를 사용했다.
crontab -e
: 에디터를 통해 크론탭을 생성한다.- 위의 명령어를 치면, vi(vim) 편집기가 실행된다.
- 만약 등록된 크론탭이 없다면 새로 파일을 만들어 주고, 있다면 편집하도록 해준다.
- 만약 등록이 안된다면, 관리자 권한으로 실행해본다.
sudo crontab -e
- vi 편집기에서,
i
혹은a
를 눌러 작성을 시작한다.i
: 현재 커서 위치부터 입력 시작 (이걸로 하고 키보드로 커서를 움직이면 됩니다)
a
: 현재 커서의 위치 다음 칸부터 입력
{시간 셋팅} {파이썬 경로} {실행할 파일 경로} {(선택)로그 경로}
의 형태로 작성한다.- {시간 셋팅} =
{분} {시} {일} {월} {요일}
*/3 * * * * : 매일 3분 간격으로 실행 */10 * * * * : 매일 10분 간격으로 실행 (00:10, 00:20, 00:30 ..) 30 10 * * * : 매일 오전 10시 30분마다 실행
- 크론탭을 생성해주는 사이트를 활용하여, 크론탭 주기를 설정하면 편하다. [바로가기]
- {파이썬 경로}
- 절대 경로로 입력한다.
- 터미널에
which python3
를 입력하여, 경로를 반환받아 활용한다.
- {실행할 파일 경로}
- 절대 경로로 입력한다.
- {로그 경로 2>&1}
> {저장할 로그파일 경로} 2>&1 # > : 하나의 로그를 갱신하여 기록 # >> : 계속 파일을 생성하며 누적할 경우
- 저는 하루에 2번 실행되는 결과를 확인하기 위해,
>>
계속 누적되는 형식으로 하고자 하였습니다.
- 파일명을
log_`date +\%Y\%m\%d`_`date +\%H\%M\%S`.log
으로 설정하였고,log_20220809_231800.log
이런 형식의 로그 파일이 생성되었습니다.
- 저는 하루에 2번 실행되는 결과를 확인하기 위해,
- {시간 셋팅} =
- 테스트를 위해, 아래처럼 크론탭을 생성하였다.
#테스트 크론탭(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}
- 작성을 완료한 이후, vi 편집기를 저장하여 빠져나와야 한다.
esc
키를 눌러, 편집 모드에서 나온다.
:wq
를 입력하여, 저장 후 나온다.
crontab -l
: 등록되어 있는 크론탭 리스트를 확인해본다.
- 지정한 시간이 되면 동작한다. 로그까지 확인해보자.
실전! 상황에 맞추어 작성하기
- 나는
매일 저녁 10시
에 티스토리로 내가 작성한 글을 자동으로 비공개발행
해주고,매일 아침 8시
에 발행한 글을 공개발행
하는 크론탭을 생성하고자 한다.- 매일 22시에
main.py
실행 →0 22 * * *
매일 08시에main.py
실행 →0 8 * * *
- 매일 22시에
#매일 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
에러 정리
- 로그에서,
Permission denied
가 나온 경우
- 로그에서,
Operation not permitted
가 나온 경우
- 파이썬 모듈을 찾지 못하는 경우
ModuleNotFoundError
- 모두 위 포스팅으로 정리해두었습니다! :D
회고
참고
반응형