django crontab + commands

dooh kim·2020년 8월 28일
2

django

목록 보기
1/1

django crontab 구현 및 django commands만들기

django crontab을 사용하여 크롤링 데이터를 주기적으로 업데이트 하는
작업을 구현했습니다.

먼저

1. commands 만들기

app
├── config
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── crawler ( ./manage startapp 으로 만든 appname)
│   ├── management
│   │   └── commands
│   │   ├── emart_cralwer.py
│   │   ├── shilladuty_cralwer.py
│   │   └── ssg_duty_cralwer.py
│   ├── admin.py
│   ├── apps.py
│   ├── chromedriver
│   ├── migrations
│   ├── models.py
│   ├── serializers.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── db.sqlite3
├── log
│   ├── emart_cralwer12_08_2020.log
│   ├── emart_cralwer13_08_2020.log
│   ├── shilladuty_cralwer13_08_2020.log
│   └── ssg_duty_cralwer13_08_2020.log
├── manage.py

command 만드는 방법

cralwer (startapp name)
1. 밑에 management 디렉터리를 만들어준다
2. management 디렉터리 밑에 commands 디렉터리를 만들어 준다
3. 마지막으로 그 밑에 실행시킬 .py 파일을 만들어준다
(이때 파일 명이 명령어 이름에 해당된다.)

2. crontab 설치 및 설정

설치

pip install django-crontab
poetry add django-crontab

settings.py 설정

INSTALLED_APPS = [

    "django_crontab",
]

log 만들어주기

잘 실행 되어있는지 log 파일을 만들어준다
makedir app/log

settings.py

  • call_command는 명령어를 사용하겠다는 설정
  • ['emart_cralwer'] 는 명령어 이름을 나타낸다(아까 우리가 만든 파일명)
  • 'BASEDIR + '/log/emart_cralwer{:%d%m_%Y}.log 2>&1'
    마지막 위치를 알려준다
CRONJOBS = [
    ('* 0 * * *', 'django.core.management.call_command', ['emart_cralwer'], {},
     '>> ' + BASE_DIR + '/log/emart_cralwer{:%d_%m_%Y}.log 2>&1'.format(datetime.now())),
    ('* * */3 * *', 'django.core.management.call_command', ['ssg_duty_cralwer'], {},
     '>> ' + BASE_DIR + '/log/ssg_duty_cralwer{:%d_%m_%Y}.log 2>&1'.format(datetime.now())),
    ('* * */3 * *', 'django.core.management.call_command', ['shilladuty_cralwer'], {},
     '>> ' + BASE_DIR + '/log/shilladuty_cralwer{:%d_%m_%Y}.log 2>&1'.format(datetime.now())),
]

마지막으로 crontab 적용!!

crontab 작업 추가

python manage.py crontab add

crontab 작업을 모두 제거

python manage.py crontab remove

crontab 현재 작업 보기

python manage.py crontab show

profile
testify to the light

0개의 댓글