๐Ÿ”ซ django-crontab ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐœ์š”

๋งค์ผ ์ •๊ฐ์— ์ƒˆ๋กœ์šด ํ•„๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๊ฒŒ ๋๋‹ค.

์ฃผ๊ธฐ์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด 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๊ฐ€ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋กœ๊ทธ ํŒŒ์ผ์ด ์ƒ์„ฑ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค ?

๊ทธ๋ ‡๋‹ค๋ฉด ๋กœ์ปฌ์ด ์•„๋‹ˆ๋ผ ์‹ค ์„œ๋ฒ„์— ์˜ฌ๋ ค์„œ ์‹คํ–‰ํ•ด๋ณด์ž.

ํ•„์ž๋Š” ๋งฅ์—์„œ ์‹คํ–‰ํ•ด๋ณด์•˜๋Š”๋ฐ ์Šค์ผ€์ค„๋ง์ด ์ž˜ ์•ˆ๋˜๋Š”์ง€ ๋กœ๊ทธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๋‹ค ใ… ใ…  ํ•˜์ง€๋งŒ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ์ž˜ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค. (ํœด)


Written by@ugaemi
Record things I want to remember

๐Ÿฑ GitHub๐Ÿ“š Reading Space