django,command,crontab
서비스에서는 주기적으로 해야하는 작업들이 많다. 매일 매일 갱신되어야하는 데이터 예를 들면 출첵 같으것이 그것이 된다.
주기적 작업을 하가위해선 cron작업이 들어가게된다.
django 프로젝트를 진행하고 있고 우린 개별적으로 특정 코드를 특정 시간에 실행시키고 싶었다.
django에서 shell command(특정코드)를 쓰기위해서 기본적으로 custom django command를 제공해준다.
custom django command 와 django-crontab 라이브러리를통해 주기적인 작업 처리를 해본다.
project
│ manage.py
│
└───{urProject}
│─── management
│─── commands
{urCronProgram}.py
그림처럼 프로젝트하위에 management폴더를 만들고, commands 폴더를 만들고 아래에 실행할 python파일을 만든다.
urCronProgram.py는 아래와같이 코딩한다.
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
def handle(self, *args, **options):
print("프린트하는 프로그램");
python3 manage.py urCronProgram
소프트웨어 유틸리티 Cron은 유닉스 계열 컴퓨터 운영 체제의 시간 기반 잡 스케줄러이다. 소프트웨어 환경을 설정하고 관리하는 사람들은 작업을 고정된 시간, 날짜, 간격에 주기적으로 실행할 수 있도록 스케줄링하기 위해 cron을 사용한다. - 위키
cron의 위키백과 정의이다. crontab(환경이자 파일)에 의해 cron이 구동된다고한다.
cron은 unix corntab을 이용하여 해당 명령어를 등록해줄 수있지만, 서비스에 적용하기위해선 서버환경 depdency는 최대한 피하는게 좋기때문에 django에서 관리해주는 django-crontab모듈을 사용한다.
도큐먼트대로 설치해본다.
pip로 라이브러리를 설치하고
pip install django-crontab
INSTALLED_APPS = (
'django_crontab',
...
)
CRONJOBS = [
('0 0 * * *','django.core.management.call_command',['urCronProgram'],{},'>> '+BASE_DIR+'/log/urCronProgram 2>&1'),
]
python manage.py crontab add
python manage.py crontab remove
python manage.py crontab remove
꼭 삭제하고 추가 안 해도된다. 기존 돌고있는것에 추가를 하면 기존 옵션이 사라지고 자동 새롭게 추가된다.
뭔가 새로운 스케쥴링을 만드는것과 같이 보이지만 사실 unix cron에 지금 설정사항들이 알맞게 설정 되어있다. crontab -l을 쳐보면 알게될 것..