[Django] django-crontab ์ค์ผ์ค๋ฌ ์์ฑ
- -
๐ Crontab
crontab์ Linux ์ด์์ฒด์ ์์ ์๊ฐ ๊ธฐ๋ฐ ์ก ์ค์ผ์ค๋ฌ์ด๋ค.
์ฆ, ์ํ๋ ์๊ฐ์ ์ํ๋ ์์ ์ ์ํํ ์ ์๊ฒ ํด์ฃผ๋ ์์ ์ค์ผ์ค๋ฌ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด ์ฅ๊ณ ์์ ๋ก๊ทธ์ธ์ ํ์ ๋, session์ผ๋ก
๊ตฌํ๋ ๋ก๊ทธ์ธ์ด๋ผ๋ฉด django-session์ session์ ๋ณด๊ฐ
์ ์ฅ๋์๋ค๊ฐ ๋ก๊ทธ์์ํ๋ฉด ์ญ์ ๊ฐ ๋๋ค.
ํ์ง๋ง ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ๊ฑฐ๋ ๋ง๋ฃ์๊ฐ์ด ์ง๋๊ฒ ๋๋ฉด
session์ ๋ณด๋ ์ ์ง๋๋ฉฐ ๋ก๊ทธ์์ ์ฒ๋ฆฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์
๊ณ์๋๋ ๋ก๊ทธ์ธ ๋ง์์ง๋ฉด ๋ถํ์ํ session ๋ฐ์ดํฐ๊ฐ ์์ฌ ์๋ฆฌ๋ฅผ ์ฐจ์งํ๊ฒ ๋๋ค.
์ด๋ ํน์ ์๊ฐ์ด ๋๋ฉด ๋ง๋ฃ๊ฐ ๋ session์ ๋ณด๋ฅผ ์ญ์ ํด ์คฌ์ผ๋ฉด ์ข๊ฒ ๋ค.
์์ ๊ธฐ๋ฅ์ ๋์ ํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก crontab!!์ด๋ค.
๐ฑ django-crontab ์ค์น
๋จผ์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ํตํด django-crontab
์ ์ค์นํด ์ค๋ค.
$ pip3 install django-crontab
์ค์น๊ฐ ์๋ฃ๋๋ฉด django ํ๋ก์ ํธ์ settings.py
์ INSTALLED_APPS
์ ํด๋น ์ฑ์ ๋ฑ๋กํด ์ค๋ค.
๐ฑ ํ์ผ์์ฑ ๋ฐ ์ฝ๋
๊ทธ๋ฆฌ๊ณ ํน์ ์ฑ ํด๋ ์์ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํํ ํ์ผ์ ์์ฑ์ค๋ค.
โโโ core
โ โโโ __init__.py
โ โโโ __pycache__
โ โโโ admin.py
โ โโโ apps.py
โ โโโ cron.py <---------- ์ฃผ๊ธฐ์ ์ผ๋ก ์คํํ ํ์ผ cron.py
โ โโโ log
โ โโโ mergeLog
โ โโโ migrations
โ โโโ models.py
โ โโโ tests.py
โ โโโ views.py
import os
import glob
from django.contrib.sessions.models import Session
from datetime import datetime
def delete_sessions():
# dir_path = "/log"
# if not os.path.isdir(dir_path):
# os.makedirs(dir_path)
sessions = Session.objects.all()
for session in sessions:
print("===================================")
print(f"ํ์ฌ์๊ฐ: {datetime.now()}", end=", ")
print(f"๋ง๋ฃ์๊ฐ: {session.expire_date}")
if datetime.now() > session.expire_date:
session.delete()
print("Delete completely expire_date!")
cron.py์ ๋ด์ฉ์ ํ์ฌ์๊ฐ๊ณผ django-session์ ๋ง๋ฃ ์๊ฐ์ ํ์ธํ์ฌ, ๋ง๋ฃ ์๊ฐ์ด ํ์ฌ๋ณด๋ค ์ด์ ์ฆ ์ด๋ฏธ ๋ง๋ฃ๋ session์ ๋ณด๋ ์ญ์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํด ์ฃผ์๋ค.
๐ฑ ์ค์
โค settings.py
CRONJOBS = [
('*/1 * * * *', 'core.cron.delete_sessions', '>> '+ os.path.join(BASE_DIR, f'core/log/cron_{datetime.now().strftime("%Y-%m-%d")}.log')),
]
settings.py๋ก ๋์์์ ์์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์.
์ ์ฝ๋๋ ({์์ ์๊ฐ ๋จ์}, {์คํํ ํ์ผ, ์์ , ํ๋ ๋ฑ}, {์์ฑํ Log ํ์ผ})์ด๋ค.
๋ด cron์ ๊ฒฝ์ฐ 1๋ถ ๊ฐ๊ฒฉ์ผ๋ก delete_sessions ํจ์๋ฅผ ์คํํ๊ณ core/log/ ๊ฒฝ๋ก์ cron_{datetime.now().strftime("%Y-%m-%d")}.log์ด๋ฆ์ ๊ฐ์ง ๋ก๊ทธํ์ผ์ ์ผ์๋ง๋ค ์์ด๊ฒ ์ค์ ์ ํด ์ฃผ์๋ค.
โค ์๊ฐ ์ค์
์ฌ๊ธฐ์ cron์ ๊ฐ๋
์ ์ง๊ณ ๋์ด๊ฐ์.
(* * * * *)๋ค์ฏ ๊ฐ์ ์์ ์๊ฐ ๋จ์๊ฐ ์กด์ฌํ๋ฉฐ, ์ผ์ชฝ๋ถํฐ ์์๋๋ก (๋ถ ์ ์ผ ์ ์์ผ)์ด๋ค.
๋ถ : 0 - 59
์ : 0 - 23
์ผ : 1 - 31
์ : 1 - 12
์์ผ : 0 - 7(1-7์ ์์์ผ - ์ผ์์ผ์ด๊ณ 0๋ ์ผ์์ผ์ด๋ค.)
๊ฐ ์๊ฐ์ ๋จ์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ๋ค.
*์ ๋งค ๋ถ, ์, ์ผ, ์, ์์ผ ์ ๋ปํ๋ค.
โค ์คํ ํ๋ก๊ทธ๋จ ์ค์
์ค์ ํ ์๊ฐ ',' ๋ค์์ 'core.cron.delete_sessions'
์ ๊ฐ์ด ํน์ app.file_name.funtion_name์ ์
๋ ฅํ์ฌ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋ ํ์ผ์ ํจ์๋ฅผ ๊ธฐ์ ํ์.
,๋ &๋ฅผ ์๋ฏธ
-๋ ๊ธฐ๊ฐ, ๋์์ ์๋ฏธ
*/์ซ์ ๋ ๊ฐ๊ฒฉ์ ์๋ฏธ
* * * * */home/test.sh๋งค ๋ถ, ์, ์ผ, ์, ์์ผ๋ง๋ค test.shํ์ผ ์คํ
์ฆ, ๋งค๋ถ๋ง๋ค test.shํ์ผ ์คํ
10 * * * * /home/test.sh๋งค์ผ ๋งค์๊ฐ 10๋ถ์ test.shํ์ผ ์คํ
30 * 5,15 * * /home/test.sh๋งค๋ฌ 5์ผ๊ณผ 15์ผ ๋งค์๊ฐ 30๋ถ์ test.shํ์ผ ์คํ
*/5 * * * 1 /home/test.sh์์์ผ๋ง๋ค 5๋ถ ๊ฐ๊ฒฉ์ผ๋ก test.shํ์ผ ์คํ
0-30 5 * * * /home/test.sh๋งค์ผ 5์ ์ ๊ฐ๋ถํฐ 30๋ถ๊น์ง test.shํ์ผ ์คํ
๐ฑ ์คํ
ํฐ๋ฏธ๋์์ manage.py ๊ฐ ์กด์ฌํ๋ ์์น์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
$ python3 manage.py crontab add
๊ทธ๋ฌ๋ฉด ์ ๊ทผํ๋ ๊ฒ์ ํ์ฉํ ๊ฒ์ธ์ง ๋ฌผ์ด๋ณด๋๋ฐ ํ์ธ์ ๋๋ฅด๋ฉด ์์ฑํ cron์ด ํ์ฑํ ๋๋ค.
$ python3 manage.py crontab show
์ด ๋ช ๋ น์ด๋ ๋ฑ๋ก๋ crontab์ ๋ชฉ๋ก์ ํ์ธ ํ ์ ์๋ค.
$ python3 manage.py crontab remove
cron์์ ์ ๋ชจ๋ ์ง์ฐ๊ณ ์ถ์ผ๋ฉด remove๋ช ๋ น์ด๋ก ์ง์ธ ์ ์๋ค.
๐ฑ ๊ฒฐ๊ณผ
core>log ์์ ์๊ฐ์ด ํ์๋ log ํ์ผ์ด ์์ฑ๋ ๊ฒ์ ํ์ธ ํ ์ ์์๊ณ ,
logํ์ผ ์์ ๋ด๊ฐ ์์ฑํ ์๊ฐ๊ณผ session์ด ์ญ์ ๋์์ ๋ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธ ํ์๋ค.
'LANGUAGES > Django' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] docker-compose๋ฅผ ์ด์ฉํ ํ๋ก์ ํธ ๋ฐฐํฌ (0) | 2023.05.08 |
---|---|
[Django] ๋ค์ํ ํ ํ๋ฆฟ ํ๊ทธ (0) | 2023.05.04 |
[Django] django-seed๋ฅผ ์ด์ฉํ ๋ฐ์ดํฐ ๋ง๋ค๊ธฐ (0) | 2023.05.03 |
[Django] Django ์ปค์คํ ์ปค๋งจ๋ ๋ง๋ค๊ธฐ (0) | 2023.05.02 |
[Django] debug_toolbar ์ฌ์ฉํ๊ธฐ (0) | 2023.04.06 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค