[Python] 크롤링으로 업무 자동화 - (6)크론

크론을 사용해서 자동으로 스크립트를 실행하자.

들어가기에 앞서

Cron

크론은 유닉스 계열 컴퓨터 운영 체제의 시간 기반 잡 스케줄러이다. 지정된 시간에 주기적으로 실행할 수 있도록 크론을 사용한다.

이전에 작성한 크롤러를 사람이 매일 실행하는 것도 불필요한 작업이다. 이 작업을 컴퓨터가 자동으로 실행할 수 있도록 할당하자.

(윈도우는 크론을 지원하지 않는다. 작업 스케줄러를 사용하거나, nncron을 설치해서 사용하면 된다.)

예약하기

크론은 crontab(cron table) 파일에 의해 구동된다. 터미널 명령어로 간단하게 조작할 수 있다.

1
2
$ crontab -l # 크론 예약 작업 목록 조회
$ crontab -e # 크론 목록 수정

터미널에 crontab -e 명령어를 입력하면 에디터가 열린다. 대부분 vi 또는 vim이 열릴 것이다. 사용법이 일반 에디터와 다르니 아래 순서를 따라 한다.

  1. i 키를 입력해서 에디터 모드로 전환한다.
  2. 0 10,17 * * 1-5 [파이썬 절대경로] [실행할 파이썬 파일 절대 경로]를 입력한다.
  3. 파이썬 절대경로는 which python 명령어, 프로젝트 절대 경로는 프로젝트 경로에서 pwd 명령어로 확인할 수 있다.
  4. esc 키를 입력하면 명령 모드로 전환된다. :wq를 입력하고 enter 키를 입력하여 저장 후 종료한다.

이렇게 입력하고 crontab -l로 확인해본다.

1
2
$ crontab-l
0 10,17 * * 1-5 /Users/choedongcheol/Workspace/dev/pycrawler-exam/venv/bin/python /Users/choedongcheol/Workspace/dev/pycrawler-exam/main.py

크론 설정 해석

크론 설정에서 0 10,17 * * 1-5의 의미는 매월 매일 월요일~금요일 10시와 17시에 실행한다라는 의미다.

위키백과 cron을 검색하면 아래의 자료를 볼 수 있다.

1
2
3
4
5
6
7
8
 # ┌───────────── min (0 - 59)
 # │ ┌────────────── hour (0 - 23)
 # │ │ ┌─────────────── day of month (1 - 31)
 # │ │ │ ┌──────────────── month (1 - 12)
 # │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
 # │ │ │ │ │
 # │ │ │ │ │
 # * * * * *  command to execute

분, 시, 일, 월, 날짜 순서다.

특징은 아래와 같다.

  1. 공백으로 구분한다.
  2. A부터 B를 모두 포함할 때는 -를 사이에 둔다.
  3. 특정 시간을 지정할 때는 ,를 사이에 둔다.
  4. 모든 것을 포함할 때는 *를 사용한다.

시간을 입력했으면 뒤에 커맨드 명령어를 입력하면 된다.

마무리

이렇게 크론까지 설정하면 모든 작업이 마무리된다.

원하는 시간대에 알아서 컴퓨터가 대신 일해주는 것은 매우 기분 좋은 일이다. 그 일이 오래걸리지 않더라도 말이다.

자동화 프로그램을 만들어본 경험이 없다면 단순한 업무라도 만들어보는 것을 권장한다. 더 중요한 일에 집중할 수 있게 될 것이다.