칵테일 웹사이트 제작 중 오늘의 추천 칵테일이라는 기능을 구현해야 했다.

즉 24시간 마다 랜덤으로 칵테일 레시피 중 1개를 골라 프론트에 전달해줘야 했다.

 

매일 정각에 자동으로 구현되는 함수를 제작하기 위해 django-crontab 을 활용하기로 했다.

 

1. crontab 설치

pip install django-crontab

이후 django의 settings.py 파일로 진입해 INSTALLED_APPS 파일에 'django_crontab'을 추가해주면 된다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    .
    .
    .
    .
    'django_crontab',
]

2. crontab 추가

첫번째로 crontab을 이용해 자동으로 수행할 함수를 작성해야 한다.

나는 cron.py 라는 파일을 따로 만든 후 함수를 작성했다.

# cron.py
from .models import Cocktail,TodayDrink

def todayDrink(): #오늘의 추천 칵테일 crontab 함수
    today_drink = Cocktail.objects.order_by("?").first()
    last_drink = TodayDrink.objects.all().first()
    
    if last_drink:
        last_drink.cocktail = today_drink
        last_drink.save()
    else:
        new_obj = TodayDrink.objects.create(cocktail = today_drink)
        new_obj.save()

그리고 다시 settings.py 파일로 진입해 맨 밑에 항목을 추가해준다.

CRONJOBS = [
    ('*/1 * * * *', 'api.cron.todayDrink')
]

 

앞의 */1 * * * * 은 시간을 세팅하는 항목이다.

다섯 개의 단위가 있다.
왼쪽부터 순서대로 분, 시, 일, 월, 요일(1-7, 월요일 - 일요일)이다.

*은 매 분, 시, 일, 월, 요일 을 뜻한다. -> ( * * * * *) 은 매 분마다 실행한다는 의미다.

* 대신 숫자를 넣으면 단위에 알맞는 숫자의 시각에 실행한다. -> (5 1 * * *) 매일 1시 5분에 실행한다는 뜻이다.

*/숫자는 간격을 의미한다. -> (*/5 * * * *) 5분마다 1번씩 실행한다는 뜻이다.

 

뒤에는 아까 설정한 함수가 있는 경로를 입력해주면 된다.

 

3. crontab 실행

터미널에 진입해 다음과 같은 명령어를 실행하면 된다.

sudo service cron start
python manage.py crontab add

 

+ Recent posts