Django crontab 라이브러리 사용법
django-crontab 라이브러리는 OS의 cron/crontab 서비스를 사용하는것으로 해당 서비스 설치가 되지 않았다면 별도로 설치를 해야함.
- windows 환경에서는 docker를 설치하여 진행
1. 라이브러리 설치
$ pip install django-crontab
2. django 설정
임의의 app 디렉터리내 cron.py 생성 아래의 함수를 작성한다.
- 반복 실행할 임의의 함수 선언
def hello_every_minute(): print("hello world")
- 반복 실행할 임의의 함수 선언
settings.py
django_crontab
앱 추가INSTALLED_APPS = [ 'django_crontab', ... ]
CRONJOBS
변수 선언- 첫번째 매개변수 : 실행주기 설정으로 기존 cron 사용법(분,시,일,월,요일)과 동일하다.
* * * * *
: 매분마다 실행*/10 * * * *
: 10분마다 실행0 * * * *
: 매시간마다 실행0 0 * * *
: 자정마다 실행
- 두번째 매개변수 : 반복 실행할 함수
- 세번째 매개변수 : cron 실행로그 저장 경로 (선택사항)
... CRONJOBS = [ ('* * * * *', 'app.cron.hello_every_minute', '>> /app/log/cron.log'), ]
- 첫번째 매개변수 : 실행주기 설정으로 기존 cron 사용법(분,시,일,월,요일)과 동일하다.
- crontab 프로젝트의 settings 파일 경로 지정
... CRONTAB_DJANGO_SETTINGS_MODULE = 'project.settings'
3. crontab 명령어
cron 작업스케줄 추가
$ python manage.py crontab add
Starting periodic command scheduler: cron. adding cronjob: (2d7f1e3059afc75b51927955cb7ccb92) -> (’* * * * *’, ‘app.cron.hello_every_minute’, ‘» /app/log/cron.log’)
cron 작업스케줄 조회
$ python manage.py crontab show
Currently active jobs in crontab:
2d7f1e3059afc75b51927955cb7ccb92 -> (’* * * * *’, ‘app.cron.hello_every_minute’, ‘» /app/log/cron.log’)cron 작업스케줄 삭제
$ python manage.py crontab remove
removing cronjob: (2d7f1e3059afc75b51927955cb7ccb92) -> (’* * * * *’, ‘app.cron.hello_every_minute’, ‘» /app/log/cron.log’)
4. 실행 결과
crontab 실행 후 해당 경로의 log 파일 확인
$ cat cron.log
hello
5. Docker-compose 사용시 설정
dockerfile 설정
... RUN apt-get update && apt-get -y install --no-install-recommends cron ...
docker-compose 설정
services: django: ... command: bash -c " service cron start && python3 manage.py crontab add"
6. Docker-compose 실행
이미지 빌드 및 컨테이너 백그라운드 실행
$ docker-compose -f docker-compose.yml up -d --build