crontab 사용법

Smiling Sammy·2021년 11월 19일
1

Linux

목록 보기
1/1
post-thumbnail

crontab이란?

crontab..?

cron을 관리하는 table을 말한다.
crontab = cron table

그럼 cron은 뭐지..?

cron..?

cron이란 특정한 시간마다 어떤 작업을 자동으로 수행하게 해주고 싶을 때 사용하는 명령어다.

즉, cron = 특정 시간에 특정 작업을 수행하게 해주는 스케줄링 역할

필자는 Mac OS를 사용 중인데 crontab은
/usr/bin/crontab에 위치하고 있다.

which crontab # /usr/bin/crontab

cron이 왜 필요해요?

매일 혹은 특정 시간마다 반복되는 일을 자동으로 실행해주기 때문에 굉장히 편리하게 사용될 수 있다!!
필자의 경우, 데이터 수집을 매일/매달하는 python 코드가 있는데,
특정 시점마다 python3 run.py를 하는건 너무 귀찮다......
crontab으로 설정하면 저 작업을 알아서 설정한 시점에 자동으로 실행해주니 얼마나 편리한가!!!

crontab 사용방법

crontab -e : cron 설정 방법 (내용 입력/수정)
crontab -l : cron 설정 확인
crontab -r : cron 내용 삭제

분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-6) 실행 명령(command)

요일의 경우 0은 일요일 6은 토요일을 의미한다.
예를 들어 매주 월요일 8시 59분에 수행을 하고 싶다면

  • 59 8 * * 1 [실행명령]을 하면 된다.
    항상 crontab을 수정했으면 :wq는 국룰인거 아시죠..?

run.py란 파일을 위의 예시와 같은 방식으로 수행하려고한다면, 아래와 같다.

PROJECT_PATH='/Users/gjtang/crontabProject
59 8 * * 1 ${PROJECT_PATH}/venv/bin/python3 ${PROJECT_PATH}/run.py

위에서 명시한 PROJECT_PATH는 해당 프로젝트가 있는 경로이며, run.py, 가상환경이 존재하는 경로를 의미한다.

만약 가상환경을 쓰지 않고 python의 위치가 /usr/bin/python3라면

PROJECT_PATH='/Users/gjtang/crontabProject
59 8 * * 1 /usr/bin/python3 ${PROJECT_PATH}/run.py

처럼 작성하면 된다.

log 사용 방법

만약 내가 crontab이 잘 실행되고 있는지 확인하려면 log를 설정해두면 된다.
설정 방법은 간단하다!

아까 분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-6) 실행 명령 뒤에 ">> [저장할 로그 경로] 2>&1"을 추가하면 된다!!

즉, 아래와 같은 양식으로 입력하면 되는 것이다.

분 시간 일 월 요일 [가상환경 경로][실행파일 경로] >> [로그파일 경로] 2>&1

예를 들어 아까 가상환경 예시에서 PROJECT_PATH에 있는 crontab_log.log란 곳에 로그를 남기려고 한다면 아래와 같이 입력하면 된다.

PROJECT_PATH='/Users/gjtang/crontabProject
59 8 * * 1 ${PROJECT_PATH}/venv/bin/python3 ${PROJECT_PATH}/run.py >> ${PROJECT_PATH}/crontab_log.log 2>&1

근데 2>&1, >>는 뭐지..?

1. >

'>' 는 표준출력을 의미한다.

  • ls > test.txt를 입력하면 ls로 출력된 내용을 text.txt에 기록한다.
    (단, test.txt는 새로 파일을 만드는 것으로 파일 자체를 덮어쓰는 개념이다)
  • ls >> test.txt를 입력하면 ls로 출력된 내용을 test.txt에 덧붙여서 기록한다.

2. <

'<' 는 표준입력을 의미한다.

  • cat < test.txt를 입력하면 text.txt 내용을 cat명령어로 읽은 뒤 화면에 보여준다.
    (test.txt의 모든 내용을 print하는 느낌이다)

3. &

'&'는 명령을 백그라운드에서 실행한다는 의미를 나타낸다.

4. 변수 접근 기호(0,1,2)

'0'은 표준 입력을 (stdin)
'1'은 표준 출력을 (stdout)
'2'은 표준 에러를 (stderr) 의미한다.

따라서 run.py >> log.log 2>&1에서
1. >> log.log의 의미는 log.log에 덧붙여서 기록을 하라는 의미이며
2. 2>&1은 표준 에러(2)를 표준 출력으로(&1) 내보내라는(=리다이렉트 하라는 >) 의미이다.

즉, run.py를 구동시키는데, 표준 에러를 표준 출력이 전달되는 곳(여기서는 log.log)으로 보내서 기록하라는 의미이다.

크론탭 백업

만약 crontab -r을 쓰거나 컴퓨터를 초기화하는 경우 크론탭 설정이 날라가버릴 수 있다. 다시 입력하자니 또 공수가 생기므로 주기적으로 백업을 하는 습관을 갖자!

백업하는 방법은 간단하다

crontab -l > [백업경로]

예를 들어 /Users/gjtang/에 있는 backup.txt로 저장을 하고 싶다면

crontab -l > /Users/gjtang/backup.txt

로 입력하면 된다!

참고

profile
Data Scientist, Data Analyst

0개의 댓글