crontab은 Linux 운영체제에서 시간 기반 잡 스케줄러이다.
쉽게 얘기해서 원하는 시간에 원하는 작업을 수행하게끔 해주는 작업 스케줄러라고 보면 된다.
예를 들어서 매일 밤 10시만 되면 배가 고픈 나는
항상 10시에 배달의 민족에 들어간다고 가정하자(가정이 아닐 수도 있다.)
그런데 매일마다 배달의 민족에 들어가는게 너무 귀찮아서
자동으로 밤 10시만 되면 배달의 민족 앱이 켜졌으면 좋겠다.
그 기능을 대신 해주는 것이 바로 🎊crontab!!
이 강력한 crontab 기능을 무려 django에서도 쓸 수 있다.
먼저 다음 명령어를 통해 django-crontab
을 설치해 준다.
pip install django-crontab
설치가 완료되면 django 프로젝트의 settings.py
의 INSTALLED_APPS
에 해당 앱을 등록해 준다.
그리고 해당 앱 폴더 안에 주기적으로 실행할 파일을 작성해 준다.
나의 경우에는
config/cron.py
으로 만들었다.
⚠️잘 모르겠으면 그냥settings.py
와 같은 위치에 생성하자⚠️my_project ㄴconfig ㄴ__init__.py ㄴsettings.py ㄴurls.py ㄴcron.py <-- 'Here's my sweety cron🐥' ㄴapp1 ㄴapp2 ㄴapp3
cron.py
의 내용이다. 나는 일단 현재 진행중인 프로젝트에다가 적용시켜 보았다. 아무 테이블이나 불러와서 첫번째 객체를 삭제시키는 작업을 할 것이다. 아래는 log
파일에 찍히는 내용들이다.
다 작성했으면 다시 settings.py
로 돌아가서 다음을 추가하자.
여기서 잠깐 cron의 개념을 짚고 넘어가자면
(* * * * *)
다섯 개의 작업 시간 단위가 있다.
왼쪽부터 순서대로(분 시 일 월 요일)
이다.- 분 : 0 - 59 - 시 : 0 - 23 - 일 : 1 - 31 - 월 : 1 - 12 - 요일 : 0 - 7 ㄴ(1 - 7은 월요일 - 일요일이고 0도 일요일이다)
각 시간의 단위는 공백으로 구분한다.
*
은 매 분, 시, 일, 월, 요일 을 뜻한다.
,
는 &를 의미-
는 기간, 동안을 의미*/숫자
는 간격을 의미
* * * * * /home/test.sh
test.sh
파일 실행test.sh
파일 실행10 * * * * /home/test.sh
test.sh
파일 실행30 * 5,15 * * /home/test.sh
test.sh
파일 실행*/5 * * * 1 /home/test.sh
test.sh
파일 실행0-30 5 * * * /home/test.sh
test.sh
파일 실행다시 django로 돌아와서
위에서 본 이 코드의 의미는
({작업 시간 단위}, {실행할 파일, 작업, 행동 등}, {작성할 Log 파일})
이다.내 cronjob의 경우 1분 간격으로
DeleteFirstObject
라는 파일을 실행하고schedule.log
파일에 저장한다는 의미이다.
모든 준비가 완료되었다.
터미널에서 manage.py
가 존재하는 위치로 이동해서 다음 명령어를 입력해보자.
python manage.py crontab add
그러면 접근하는 것을 허용할 것인지 물어보는데 확인을 누르면 당신의 cron 작업이 활성화 된다.
python manage.py crontab show
이 명령어는 등록된 crontab의 목록을 볼 수 있다.
python manage.py crontab remove
cron작업들을 모두 지우고 싶으면 remove
명령어로 지울 수 있다.
크론들이 작업해 줄 파일 코드이다. django ORM을 실행해 줄 것이고 삭제가 되었다는 문구와 삭제된 시간을 출력할 것이다.
1분 마다 테이블의 객체 하나씩 지우도록 설정해 놓고 딴 짓하고 돌아왔는데 싹다 먹어 치웠다....ㅠㅠㅠㅠ
나의 로그 파일이다. 고생한 나의 크론에게 박수를 보내고 희생당한 나의 테이블 데이터들에게 조의를 표하며 글을 마친다.