๋งค์ผ ์ ๊ฐ์ ์๋ก์ด ํ๋๋ฅผ ๋ง๋ค์ด๋ด์ผ ํ๋ ๊ธฐ๋ฅ์ด ํ์ํ๊ฒ ๋๋ค.
์ฃผ๊ธฐ์ ์ผ๋ก ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด django-crontab์ ์ฌ์ฉํ ๊ฒฝํ์ ์ ๋ฆฌํ๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ค์นํ๋ค.
pip install django-crontab
์ค์น๋ฅผ ์๋ฃํ๋ค๋ฉด, settings.py
์ INSTALLED_APPS
์ django_crontab
์ ์ถ๊ฐํด์ฃผ์.
ํ์ดํ(-
)์ด ์๋๋ผ ์ธ๋๋ฐ(_
)์ด๋ ํท๊ฐ๋ฆฌ์ง ์๋๋ก ์ฃผ์ํ๋๋ก ํ์.
INSTALLED_APPS = (
'django_crontab',
...
)
์ด์ cron์๊ฒ ๋๊ฒจ์ค ์
๋ฌด ํจ์๋ฅผ ๊ตฌํํ๋ค.
๊ฐ๋จํ๊ฒ 1๋ถ๋ง๋ค hello๋ฅผ ์ถ๋ ฅํ๋๋ก ํ๋ ํจ์๋ฅผ ๋ง๋ค์ด ํ
์คํธํด๋ณด์.
app ํด๋ ํ์์ cron.py
ํ์ผ์ ๋ง๋ค๊ณ ํจ์๋ฅผ ์ ์ํ๋ค.
def hello_every_minute():
print('hello')
์ด ํจ์๋ฅผ cron์๊ฒ ๋๊ฒจ์ฃผ์ด์ผ ํ๋ค.
๋ค์ settings.py
๋ก ๋์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํด์ค๋ค.
CRONJOBS = [
('* * * * *', 'app.cron.hello_every_minute', '>> /tmp/log/ggbc_cron.log'),
]
CRONJOBS
๋ฆฌ์คํธ์๋ ์ฌ๋ฌ ๊ฐ์ Job์ ๋ฃ์ด์ค ์ ์๋ค.
์ฒซ ๋ฒ์งธ ์ธ์์๋ ์
๋ฌด๋ฅผ ์ด๋ ์ฃผ๊ธฐ๋ก ์คํํ ์ง์ ๋ํ ๋ด์ฉ์ด๋ค.
์ฒ์๋ถํฐ ๋ถ, ์, ์ผ, ์, ์์ผ์ ๋ํ ๊ฐ์ด๋ฉฐ ๋ชจ๋ *
์ธ ๊ฒฝ์ฐ์๋ ๋งค ๋ถ๋ง๋ค ์คํํ๋ค.
์๋ฅผ ๋ค์ด ํ์์ ๊ฐ์ด ์์ ๋ง๋ค ์ด ์์
์ ์คํํ๊ณ ์ถ์ผ๋ฉด '* 0 * * *'
๊ณผ ๊ฐ์ด ์์ฑํด์ฃผ๋ฉด ๋๋ค.
์ผ์ฃผ์ผ๋ง๋ค ๋๊ณ ์ถ์ผ๋ฉด '* * */3 * *
๊ณผ ๊ฐ์ด ์์ฑํด์ค๋ค.
์ฌ๋์(/
)๊ฐ ์์ผ๋ฉด ๋งค ๋ถ(๋๋ ์, ์ผ, ์, ์์ผ)๋ง๋ค ์คํํ๋ ๊ฒ์ด๊ณ ์์ผ๋ฉด ํน์ ์๊ฐ์ ์คํํ๋ค๋ ๋ป์ด ๋๋ค.
์ฌ๋์์ ์ซ์ ์ฌ์ด์ ๊ณต๋ฐฑ์ด ์๋๋ก ์ฃผ์ํ์.
๋ ๋ฒ์งธ ์ธ์๋ ์ ๋ฌด ํจ์์ ๊ฒฝ๋ก์ด๋ค.
์ธ ๋ฒ์งธ ์ธ์๋ cron ์คํ ๋ก๊ทธ๋ฅผ ์์ ํ์ผ์ ๊ฒฝ๋ก์ด๋ค. ์ถ๋ ฅ๊ฐ์ ๋งค๋ฒ ํ์ธํ ์ ์์ผ๋ ์์ ๊ฐ์ด ๋ก๊ทธ ํ์ผ๋ก ์ ์ฅํ๋๋ก ํ์.
๋ค์ ๋ช ๋ น์ด๋ก cron์๊ฒ ์ ๋ฌด๋ค์ ์ถ๊ฐํด์ฃผ์.
python manage.py crontab add
์ ๋ค์ด๊ฐ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ด๋ก ํ์ฌ cron์ ๋ถ์ฌ๋ ์ ๋ฌด ๋ฆฌ์คํธ๋ฅผ ํ์ธํ์.
python manage.py crontab show
์
๋ฌด๋ค์ด ํ ๋ฆฌ์คํธ(CRONJOBS
) ์์ ์์ผ๋ฏ๋ก ํ ๋ฒ์ ์ญ์ ๋๊ณ ํ ๋ฒ์ ์ถ๊ฐ๋๋ค.
์ญ์ ํ๋ ๋ช
๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
python manage.py crontab remove
์ญ์ ํ ๋ ์๋ฌ๊ฐ ๋๋ค๋ฉด ์ถ๊ฐ ๋ช ๋ น์ด๋ฅผ ๋ค์ ํด๋ณด๊ณ ์ญ์ ํด๋ณด์.
์, ์ด์ cron์ด ๋๋ฉด์ ๋งค ๋ถ ๋ก๊ทธ ํ์ผ์ hello๊ฐ ์ถ๊ฐ๋์ด์ผ ํ๋๋ฐ, ๋ก๊ทธ ํ์ผ์ด ์์ฑ์ด ๋์ง ์๋๋ค ?
๊ทธ๋ ๋ค๋ฉด ๋ก์ปฌ์ด ์๋๋ผ ์ค ์๋ฒ์ ์ฌ๋ ค์ ์คํํด๋ณด์.
ํ์๋ ๋งฅ์์ ์คํํด๋ณด์๋๋ฐ ์ค์ผ์ค๋ง์ด ์ ์๋๋์ง ๋ก๊ทธ ํ์ผ์ด ์์ฑ๋์ง ์์๋ค ใ ใ ํ์ง๋ง ๋ฆฌ๋ ์ค ํ๊ฒฝ์์๋ ์ ๋์๊ฐ๋ ๊ฒ์ ํ์ธํ๋ค. (ํด)