Celery: ๊ธฐ๋Šฅ: Beat๋Š” ๋™์‹œ ํ˜ธ์ถœ์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2010๋…„ 11์›” 17์ผ  ยท  48์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: celery/celery

์‚ฌ์šฉ์ž์—๊ฒŒ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— ํ•˜๋‚˜์˜ celerybeat ์ธ์Šคํ„ด์Šค๋งŒ ์กด์žฌํ•˜๋„๋ก ์š”๊ตฌํ•˜๋ฉด ์ƒ๋‹นํ•œ ๊ตฌํ˜„ ๋ถ€๋‹ด์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(๋‹จ์ผ ์‹คํŒจ ์ง€์ ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ๋ถ„์‚ฐ ๋ฎคํ…์Šค๋ฅผ ๋กค๋งํ•˜๋„๋ก ๊ถŒ์žฅ).

celerybeat๋Š” ๋ถ€์ฃผ์˜ํ•œ ๋™์‹œ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ๋ฌธ์„œ์—์„œ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ์•ˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Celerybeat

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@ankur11 ๋‹จ์ผ ๋น„ํŠธ๋Š” ํ•˜๋‚˜์˜ celery beat ์ธ์Šคํ„ด์Šค๋งŒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค ๊ฐ„์— ์ผ์ • ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

15๋ถ„๋งˆ๋‹ค ์‹คํ–‰๋˜๋„๋ก ์˜๋„๋œ ์ฃผ๊ธฐ์ ์ธ ์ž‘์—…๊ณผ ํ•จ๊ป˜ ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ž‘์—…์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹คํ–‰๋œ ํ›„ 14๋ถ„ ํ›„์— ๋‹จ์ผ ๋น„ํŠธ๋กœ ์žฅ์•  ์กฐ์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ž‘์—…์€ ์ƒˆ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ ์ดํ›„ 15๋ถ„๊นŒ์ง€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹œ์ž‘๋˜์–ด 29๋ถ„ ๊ฐ„๊ฒฉ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ๊ฐ„์— ์ผ์ • ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๋ ค๋ฉด ๋Œ€์ฒด ์Šค์ผ€์ค„๋Ÿฌ ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. django-celery-beat ๋Š” Celery ๋ฌธ์„œ์— ์–ธ๊ธ‰๋œ ๋Œ€์•ˆ์ด์ง€๋งŒ, ์ €๋Š” Redis๋ฅผ Celery ๋ฐฑ์—”๋“œ๋กœ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ • ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ๋ฐฑ์—”๋“œ๋กœ Redis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ–ˆ์Šต๋‹ˆ๋‹ค.

Redbeat๋Š” Redis๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ณต์œ  ์ผ์ • ์ƒํƒœ์™€ ์ž ๊ธˆ์„ ๋ชจ๋‘ ํฌํ•จํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ž‘์—…์„ ์˜ˆ์•ฝํ•˜๋„๋ก ํ•˜๋ฏ€๋กœ ๋‹จ์ผ ๋น„ํŠธ๋‚˜ BeatCop์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ํ›„์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ตฌํ˜„์—์„œ celery beat๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์—์„œ Supervisord์— ์˜ํ•ด ์‹œ์ž‘๋˜๋ฉฐ Redbeat๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: exec celery beat --scheduler=redbeat.RedBeatScheduler --app=myproject.celery:app ). ๋ถˆํ–‰ํžˆ๋„ ์ž‘์—… ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  48 ๋Œ“๊ธ€

์ด๊ฒƒ์€ kombu.pidbox ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๊ฒƒ์€ ๋˜ํ•œ celeryd ๊ฐ€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ž„์„ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. celerybeat ๋Š” ์ค‘์•™ ์ง‘์ค‘์‹์ด๋ฏ€๋กœ ๊ณ ์ • ๋…ธ๋“œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€์ž‘์šฉ์œผ๋กœ ์›๊ฒฉ ์ œ์–ด ๋ช…๋ น์œผ๋กœ celerybeat๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด ์ผ์ •์„ ๋‹ค์‹œ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ๊ธฐํ•œ์„ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ). ๋‹น์‹ ์ด ๋‚˜์—๊ฒŒ ๋ฌป๋Š”๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๊ฝค ๋ฉ‹์ง„ ๋ถ€์ž‘์šฉ์ž…๋‹ˆ๋‹ค.

๋™์ผํ•œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋” ๋งŽ์€ ๊ณ„ํš์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ผ์ •์„ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ "๋ถ„ํ• "ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ๊ฐ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๋…ธ๋“œ ์ด๋ฆ„์„ ์„ ํƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 2.3.0์œผ๋กœ ์—ฐ๊ธฐ.

celerybeat ์‹คํ–‰ํ•˜๋Š” ์ƒ์ž๊ฐ€ ๊ทธ ์ž๋ฆฌ๋ฅผ ๋Œ€์‹ ํ•  ์ƒˆ celerybeat ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ ์ ˆํ•œ ๋Œ€์ฒด ์—†์ด ์˜คํ”„๋ผ์ธ์ด ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. celerybeat ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” HA ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

kombu.pidbox ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ ์ • ๋…ธ๋“œ ์ด๋ฆ„์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ž„์„ ๊ฐ์ง€ํ•˜๊ณ  ํด๋งํ•˜์—ฌ ํ™œ์„ฑ ์ƒํƒœ๋กœ ์Šน๊ฒฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž ์ž๊ธฐ ์ƒํƒœ๊ฐ€ ๋˜๋Š” celerybeat ์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์šด๋˜๋‚˜์š”?

์—ฌ๋Ÿฌ ํ™œ์„ฑ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ผ์ •์„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ ์™ธ์— ์–ด๋–ค ๋‹ค๋ฅธ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

+1

+1

์ด๋Š” ์ผ์ •์˜ ํƒ„๋ ฅ์„ฑ์ด ์ค‘์š”ํ•˜๋ฏ€๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐฐํฌ์˜ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ์šฐ๋ ค๋˜๋Š” ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

+9999 ;)
kombu.pidbox ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ƒค๋”ฉ๊ณผ ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์ด ์—†์–ด๋„ ์ด๊ฒƒ์€ ํ›Œ๋ฅญํ•˜๊ณ  ๋งค์šฐ ํŽธ๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ celerybeat๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Pidbox๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋น„ํŠธ๊ฐ€ ์†Œ๋น„์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. '์—ฌ๊ธฐ์— ๋น„ํŠธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?'์™€ ๊ฐ™์€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฉ”์‹œ์ง€์— ์‘๋‹ตํ•˜๋ ค๋ฉด ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ํ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์†์ ์œผ๋กœ ์ˆ˜์‹  ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋ฉฐ ํ˜„์žฌ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์˜ˆ์•ฝ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์œผ๋กœ ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๊ธฐ๋Šฅ์—๋งŒ ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ํ•ด๊ฒฐ์ฑ…์€ ์ž ๊ธˆ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ž ๊ธˆ์„ ํ•ด์ œํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋น„ํŠธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ถ€์‹ค ์ž ๊ธˆ์€ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™ ๊ฐœ์ž…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ž ๊ธˆ์— ๋Œ€ํ•ด 2์ดˆ์˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ 1์ดˆ๋งˆ๋‹ค ์ž ๊ธˆ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž ๊ธˆ์ด ์œ ์ง€๋˜๋ฉด ์ƒˆ ์ธ์Šคํ„ด์Šค๊ฐ€ 2์ดˆ ๋™์•ˆ ๊ธฐ๋‹ค๋ ค์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

amqp์˜ ์ž ๊ธˆ์€ ๋Œ€๊ธฐ์—ด์„ ์„ ์–ธํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: `queue_declare('celerybeat.lock', arguments={'x-expires': 2000}``)

+1

๋‚˜๋Š” ์ด๊ฒƒ์„๋ณด๊ณ  ์‹ถ๋‹ค

+1

+1

+1๋„

+1

์‹ค์ œ๋กœ kombu.pidbox ์†”๋ฃจ์…˜์ด๋‚˜ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๊ณต์œ ํ•˜์‹ญ์‹œ์˜ค. ์—ฌ์ „ํžˆ ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ดํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ ๋•Œ๋ฌธ์— ์…€๋Ÿฌ๋ฆฌ์—์„œ ์™„์ „ํžˆ ๋ฉ€์–ด์ง„ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ๋„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ํ•˜๋‹ค:

Google ํ† ๋ก (https://www.google.co.in/search?q=celerybeat+lock&aq=f&oq=celerybeat+lock&aqs=)์„ ํ†ตํ•ด ์ด ์š”์ง€(https://gist.github.com/winhamwr/2719812)๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. chrome.0.57j62l3.2125j0&sourceid=chrome&ie=UTF-8).

๋˜ํ•œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ celerybeat์— ๋Œ€ํ•ด ๊ณต์œ  pidfile์„ ์ง์ ‘ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. AWS์˜ EBS ๋˜๋Š” S3 ๋ฒ„ํ‚ท... celerybeat --pidfile=/path/to/shared/volume .

๋‚˜๋Š” ํ˜„์žฌ ๋งˆ์Šคํ„ฐ(3.1 dev)์— ์†Œ๋น„์ž๋ฅผ ์œ„ํ•œ ๊ฐ€์‹ญ ๋‹จ๊ณ„๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค. ๋‚ด์žฅ๋œ ๋น„ํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์‹ญ ๋Œ€๊ธฐ์—ด๊ณผ ๋ฆฌ๋” ์„ ์ถœ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ฆ‰, ๊ฐ ์ž‘์—…์ž๋Š” ํฌํ•จ๋œ ๋น„ํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜์ง€๋งŒ ๋ฆฌ๋”๋งŒ ์ •๊ธฐ ์ž‘์—…์„ ๋Œ€๊ธฐ์—ด์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ณต์œ  ์ผ์ • ์ €์žฅ์„ ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mlavin ์ด๊ฒƒ์€ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ธŒ๋กœ์ปค ์ „์†ก์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

pidbox ์†”๋ฃจ์…˜์˜ ๋ฌธ์ œ๋Š” celerybeat ํ”„๋กœ๊ทธ๋žจ์ด ๋น„๋™๊ธฐ I/O๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋‹ค์‹œ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ฐจ๋‹จํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์ž‘์—…์„ ์†Œ๋น„ํ•˜๊ณ  ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์—๋Š” ๋น„ํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•œ ์ „์šฉ ํ˜ธ์ŠคํŠธ๊ฐ€ ์žˆ๊ณ  --pidfile ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€ ์ „ํ˜€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ข…์ข… ์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋ฐ๋ชฌํ™”์—์„œ -B ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ ํ•ด๋‹น ์„ค์ •์„ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์— ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์„ฑ๊ฐ€์‹  ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง„์ •์œผ๋กœ ์†”๋ฃจ์…˜์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ๊ธฐ์—ฌํ•˜๊ฑฐ๋‚˜ ์ €๋ฅผ ๊ณ ์šฉ/๊ธฐ๋ถ€ํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

uWSGI ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ํด๋ฐฑํ•˜๋Š” ๋‹จ์ผ ๋น„ํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+1, ๋™์ผํ•œ Amazon EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ์ฃผ๊ธฐ์  ์ž‘์—…์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋™์•ˆ ๋‚˜๋Š” uWSGI๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ์•ˆ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

+1

+1

์ €๋Š” ์ง์žฅ์—์„œ ์ผ์ • ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Celerybeat๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋ก€๋ฅผ ๋งŒ๋“ค์–ด ์™”์ง€๋งŒ ์ฆ‰์‹œ HA๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด๊ฒƒ ๋•Œ๋ฌธ์— ์•„์˜ˆ ๋ฒ„๋ฆด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, 1๊ฐœ์˜ Celerybeat ์ธ์Šคํ„ด์Šค๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋‹จ์ผ ์‹คํŒจ ์ง€์ ์ด ๋˜๋ฏ€๋กœ ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@junaidch ์ด๊ฒƒ ๋•Œ๋ฌธ์— ์…€๋Ÿฌ๋ฆฌ๋ฅผ ๋–จ์–ด๋œจ๋ฆฌ๋ฉด ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ๋ชจ๋“  ์„œ๋ฒ„์—์„œ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฃผ๊ธฐ์ ์ธ ์ž‘์—…์˜ ๊ฒฝ์šฐ ์ผ์ข…์˜ ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๊ฒน์น˜์ง€ ์•Š๊ณ  ๋„ˆ๋ฌด ์ž์ฃผ ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์ง€์ •ํ•˜๊ณ  ๊ฑฐ๊ธฐ์—์„œ ์ž ๊ธˆ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ž‘์—… ์ˆ˜์ค€ ์ž ๊ธˆ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋Œ€์‹  ์Šค์ผ€์ค„๋Ÿฌ์—์„œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ผ์ข…์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Ÿฌ๋ฆฌ์— ๋‚ด์žฅ๋œ ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ๋” ์ข‹์„ ๊ฒƒ์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ํ”„๋กœ๋•์…˜์—์„œ ์ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@23doors ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ž‘์—…์€ ์ด๋ฏธ Redis ์ž ๊ธˆ์„ ์œ ์ง€ํ•˜์—ฌ ์ž‘์—…์˜ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 2๊ฐœ์˜ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ 2๊ฐœ์˜ ๋น„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ž‘์—…์ด 5๋ถ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์˜ˆ์•ฝ๋œ ๊ฒฝ์šฐ ๋‘ ๋น„ํŠธ๊ฐ€ ์ž‘์—…์„ ๋Œ€๊ธฐ์—ด๋กœ ํ‘ธ์‹œํ•˜๋”๋ผ๋„ ์ž‘๋™ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๋•Œ ์ฑ„ํƒ ์‚ฌ๋ก€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋” ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

ํ•˜์œ„ ๋ถ„๋ฅ˜ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋” ๊นจ๋—ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

Lulu์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ํด๋Ÿฌ์Šคํ„ฐ ์‹ฑ๊ธ€ํ†ค ๊ด€๋ฆฌ์ž(BeatCop์ด๋ผ๋Š” ์ด๋ฆ„)๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ๋ฃŒ๋˜๋Š” Redis ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์—ฌ Celery ์ž‘์—…์ž์˜ ์ž๋™ ํฌ๊ธฐ ์กฐ์ • ํ’€์—์„œ ์‹คํ–‰๋˜๋Š” Celerybeat๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น Celerybeat์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด(์˜ˆ: ์ธ์Šคํ„ด์Šค๊ฐ€ ํ™•์žฅ๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ Celerybeat๊ฐ€ ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ) ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒˆ Celerybeat๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” BeatCop ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค .

@ingmar ์šฐ๋ฆฌ๋Š” ๊ฐ™์€ ์ด์œ ๋กœ ์ด https://github.com/ybrs/single-beat ๋ฅผ ์ผ์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ๋ฒˆ์— ํ™•์ธํ–ˆ์„ ๋•Œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ๊ฑฐ๋‚˜ ์ ์€ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ•œ, beatcop๊ณผ์˜ ์ฃผ์š” ์ฐจ์ด์  - ์šฐ๋ฆฌ๋Š” pyuv๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค - ๊ทธ๋ž˜์„œ beatcop์ด ๋” ์ด์‹์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ์ข…์†์„ฑ์ด ๋œํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค - ์ž์‹์˜ stderr ๋ฐ stdout์„ ๋ถ€๋ชจ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ณ  ์ž์‹์ด ๋™์ผํ•œ ์ฝ”๋“œ๋กœ ์ฃฝ์œผ๋ฉด ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜. ๊ทธ๋ž˜์„œ ๊ฐ๋…์ž์— ์ถ”๊ฐ€ํ•˜๊ธฐ๊ฐ€ ์กฐ๊ธˆ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

+1

+1

Consul ํ‚ค-๊ฐ’์„ ์ž ๊ธˆ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋Š” ์ž ๊ธˆ์ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ "ํœด๋ฉด"ํ•œ ๋‹ค์Œ ์˜์‚ฌ ์„ ๊ฑฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์ง€์ •๋œ ํ‚ค ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•  ์‚ฌ๋žŒ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‚ฌ๋žŒ์ด ์ž‘๋™ํ•˜๋Š” ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค.

@ingmar ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚ด ์ž‘์—…์ž ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ตฌํ˜„์—์„œ +10์€ ์ฒ˜์Œ์— ๋ถ„์‚ฐ ๋Œ€๊ธฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๋‹จ์ผ ์‹คํŒจ ์ง€์ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

+1

+1

์ด๊ฒƒ์€ v5.0.0์— ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค https://github.com/celery/celery/milestones/v5.0.0

+1

ํ˜„์žฌ ๋ฆฌ์†Œ์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ 10๋…„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์†Œ์œ„ "๋ถ„์‚ฐ" ๋Œ€๊ธฐ์—ด์— ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋”๋ผ๋„ ๊ฒฐ๊ตญ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. _์ง€๊ธˆ ๋‹น์žฅ_ ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™„๋ฒฝํ•˜๊ฒŒ ์œ ํšจํ•œ ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์€ ์˜ณ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์—ด์–ด ํ˜„์žฌ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ ˆ์ด๋ธ”์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ์‡„ ์ด์œ ๊ฐ€ ํ„ฐ๋ฌด๋‹ˆ์—†์ด ๊ฐ‘์ž‘์Šค๋Ÿฌ์› ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์šฉ์ž๋กœ์„œ ๊ท€ํ•˜์˜ ๊ฐ์ •์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ์ˆ ์ ์œผ๋กœ Beat๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. Celery์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์—ˆ์œผ๋ฉฐ ๊ตฌํ˜„์„ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ๋น„๋ถ„์‚ฐํ˜•์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ Celery๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๋ณด๋„ˆ์Šค๋กœ Python์—์„œ cronjob์„ ์ •์˜ํ•˜๋Š” ๊น”๋”ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ ์ ์  ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Celery๋ฅผ cron ๋Œ€์ฒดํ’ˆ์œผ๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” 6๋…„ ๋™์•ˆ ๊ณต๊ฐœ๋˜์—ˆ์œผ๋ฉฐ, ์ž์ฃผ ์š”์ฒญ๋˜๊ณ  ์ˆ˜๋งŽ์€ ํšŒ์‚ฌ๊ฐ€ ์ด์— ์˜์กดํ•˜๊ณ  ์žˆ์ง€๋งŒ ์•„๋ฌด๋„ ๊ตฌํ˜„ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๊ฒ ๋‹ค๊ณ  ์ œ์•ˆํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ํšŒ์‚ฌ๊ฐ€ ํ›„์›ํ•˜๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค. ํšŒ์‚ฌ๊ฐ€ ๊ธฐ๋Šฅ, ๋ฒ„๊ทธ ์ˆ˜์ • ๋˜๋Š” ํ”„๋กœ๋•์…˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ๋•๊ธฐ ์œ„ํ•ด ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„๋งˆ ๊ทธ๊ฒƒ๋“ค์„ ํ•œ ์†์œผ๋กœ ์…€ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‹น์‹ ์€ ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค), ๊ทธ๋ž˜์„œ ์ด์ œ ์ €๋Š” ๊ทธ ์ƒ๊ฐ์ด ์–ผ๋งˆ๋‚˜ ์ˆœ์ง„ํ•œ์ง€ ์••๋‹ˆ๋‹ค :)

๋‚˜๋Š” ์˜ค๋Š˜ ์ด ๋ฌธ์ œ์˜ ๋ณต์ œ๋ณธ์„ ๋‹ซ์•˜์Šต๋‹ˆ๋‹ค. #1495๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋ช‡๋ช‡์€ ์œ ๋งํ–ˆ์ง€๋งŒ ์ฃผ์–ด์ง„ ๊ตฌํ˜„์ด ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ—Œ์‹ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์•„์ง ์ œ๋Œ€๋กœ ๊ฒ€ํ† ํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ์ด๊ฒƒ์€ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ํ–‰๋™์— ์˜ฎ๊ธฐ๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋”๋ผ๋„ ์•„๋ฌด๋„ ์ž‘์—…ํ•˜์ง€ ์•Š๋Š” 6๋…„ ๋™์•ˆ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์—ด์–ด ๋‘๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์ผ์ข…์˜ ์‹ค๋ก€์ž…๋‹ˆ๋‹ค.

@ ์ถฉ๋ถ„ํžˆ ๊ณต์ •ํ•˜๊ฒŒ

์‹œ๊ฐ„์„ ๋‚ด์–ด ์ด์œ ๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@ask ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ๊ณต์œ ๋˜๋Š” NFS ๋ณผ๋ฅจ ๋‚ด์—์„œ celerybeat-schedule ํŒŒ์ผ( celery.beat.PersistentScheduler )์„ ์ฐพ์•„ ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

PersistentScheduler ํด๋ž˜์Šค๋Š” shelve ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋“ˆ๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ celerybeat-schedule ํŒŒ์ผ์— ๋Œ€ํ•œ ๋™์‹œ ์“ฐ๊ธฐ๋Š” ์˜๋„์ ์œผ๋กœ ๋ฐฉ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. shelve ๋ฌธ์„œ ์—์„œ ๋ฐœ์ทŒํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์„ ๋ฐ˜ ๋ชจ๋“ˆ์€ ์„ ๋ฐ˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๋™์‹œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์•ก์„ธ์Šค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์—ฌ๋Ÿฌ ๋™์‹œ ์ฝ๊ธฐ ์•ก์„ธ์Šค๋Š” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.) ํ”„๋กœ๊ทธ๋žจ์— ์“ฐ๊ธฐ์šฉ์œผ๋กœ ์„ ๋ฐ˜์ด ์—ด๋ ค ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ฝ๊ธฐ ๋˜๋Š” ์“ฐ๊ธฐ์šฉ์œผ๋กœ ์„ ๋ฐ˜์„ ์—ด์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

celery -A project-name beat -l info -s /nfs_shared_volume/celerybeat-schedule

์—ฌ๊ธฐ์„œ /nfs_shared_volume ๋Š” ๊ณต์œ  ๋ณผ๋ฅจ(์˜ˆ: AWS Elastic File System์—์„œ ๊ด€๋ฆฌ)์ž…๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ํ•˜๋‚˜์˜ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋”๋ผ๋„ ์ผ์ •์ด ์—‰๋ง์ด ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@mikeschaekermann ๋‚ด๊ฐ€ ๋ฌธ์„œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฝ๊ณ  ์žˆ๋‹ค๋ฉด shelve ๋™์‹œ ์“ฐ๊ธฐ ์•ก์„ธ์Šค๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋†”๋‘์ง€ ๋ง๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ธ์šฉํ•œ ์„น์…˜์—์„œ๋Š” "Unix ํŒŒ์ผ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” Unix ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

@ze-phyr-us ๋‚˜๋Š” ๋‹น์‹ ์ด ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  shelve ๋ฌธ์„œ๋ฅผ ์ž˜๋ชป ํ•ด์„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ Scheduler ๋ฐฑ์—”๋“œ๊ฐ€ ์ผ์ •์— ๋”ฐ๋ผ ์›์ž์  ์ž‘์—…์„ ๋ณด์žฅํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. @ask django-celery-beat ํŒจํ‚ค์ง€ ๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์›์ž์„ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? ์ผ๋ถ€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋ถ„์‚ฐ/์ž๋™ ํฌ๊ธฐ ์กฐ์ • ์นœํ™”์ ์ธ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋™์•ˆ ์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค๊ณ  Redis๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ BeatCop๊ณผ ์‹ฑ๊ธ€ ๋น„ํŠธ๋ฅผ ๋ชจ๋‘ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ตญ RedBeat๋ฅผ ์„ ํƒ

์•ˆ๋…•ํ•˜์„ธ์š” @ddevlin
์ €๋„ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฑ๊ธ€๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‚˜์š”? ๋˜ํ•œ ๋„ˆ๋ฌด ๋งŽ์ง€ ์•Š๋‹ค๋ฉด ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋Œ€ํ•ด redbeat๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ตฌํ˜„ ์ƒ˜ํ”Œ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ankur11 ๋‹จ์ผ ๋น„ํŠธ๋Š” ํ•˜๋‚˜์˜ celery beat ์ธ์Šคํ„ด์Šค๋งŒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค ๊ฐ„์— ์ผ์ • ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

15๋ถ„๋งˆ๋‹ค ์‹คํ–‰๋˜๋„๋ก ์˜๋„๋œ ์ฃผ๊ธฐ์ ์ธ ์ž‘์—…๊ณผ ํ•จ๊ป˜ ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ž‘์—…์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹คํ–‰๋œ ํ›„ 14๋ถ„ ํ›„์— ๋‹จ์ผ ๋น„ํŠธ๋กœ ์žฅ์•  ์กฐ์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ž‘์—…์€ ์ƒˆ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ ์ดํ›„ 15๋ถ„๊นŒ์ง€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹œ์ž‘๋˜์–ด 29๋ถ„ ๊ฐ„๊ฒฉ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ๊ฐ„์— ์ผ์ • ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๋ ค๋ฉด ๋Œ€์ฒด ์Šค์ผ€์ค„๋Ÿฌ ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. django-celery-beat ๋Š” Celery ๋ฌธ์„œ์— ์–ธ๊ธ‰๋œ ๋Œ€์•ˆ์ด์ง€๋งŒ, ์ €๋Š” Redis๋ฅผ Celery ๋ฐฑ์—”๋“œ๋กœ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ • ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ๋ฐฑ์—”๋“œ๋กœ Redis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ–ˆ์Šต๋‹ˆ๋‹ค.

Redbeat๋Š” Redis๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ณต์œ  ์ผ์ • ์ƒํƒœ์™€ ์ž ๊ธˆ์„ ๋ชจ๋‘ ํฌํ•จํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ž‘์—…์„ ์˜ˆ์•ฝํ•˜๋„๋ก ํ•˜๋ฏ€๋กœ ๋‹จ์ผ ๋น„ํŠธ๋‚˜ BeatCop์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ํ›„์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ตฌํ˜„์—์„œ celery beat๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์—์„œ Supervisord์— ์˜ํ•ด ์‹œ์ž‘๋˜๋ฉฐ Redbeat๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: exec celery beat --scheduler=redbeat.RedBeatScheduler --app=myproject.celery:app ). ๋ถˆํ–‰ํžˆ๋„ ์ž‘์—… ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@mikeschaekermann ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ๋ฅผ /use/bin/flock์œผ๋กœ ๊ฐ์‹ธ์„œ ์•ก์„ธ์Šค๋ฅผ ์ž ๊ธ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

flock /nfs/lock.file celery beat ...

NFS ์ž ๊ธˆ ๊ตฌํ˜„์„ ์‹ ๋ขฐํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. :)

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋กœ์ปค๊ฐ€ ์ฃฝ์„ ๋•Œ๊นŒ์ง€ ํ•˜๋‚˜๋งŒ ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

@mikeschaekermann ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ๋ฅผ /use/bin/flock์œผ๋กœ ๊ฐ์‹ธ์„œ ์•ก์„ธ์Šค๋ฅผ ์ž ๊ธ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

๋ฌด๋ฆฌ /nfs/lock.file ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ ...

NFS ์ž ๊ธˆ ๊ตฌํ˜„์„ ์‹ ๋ขฐํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. :)

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋กœ์ปค๊ฐ€ ์ฃฝ์„ ๋•Œ๊นŒ์ง€ ํ•˜๋‚˜๋งŒ ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ–ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ NFS ์ž ๊ธˆ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ NFS ์„œ๋ฒ„์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ๋Š์œผ๋ฉด NFS ์„œ๋ฒ„์—์„œ ์ž ๊ธˆ์„ ์ทจ์†Œํ•˜๊ณ  ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ ์ž ๊ธˆ ํ™€๋”๊ฐ€ ์—ฐ๊ฒฐ์„ ๋‹ค์‹œ ์–ป์—ˆ์„ ๋•Œ ํ”Œ๋ก์€ ์ž ๊ธˆ์ด ์ทจ์†Œ๋˜์—ˆ์Œ์„ ๊นจ๋‹ซ์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์ด์ œ ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ์„ '๋ฆฌ๋”'๋ผ๊ณ  ๋ฏฟ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Postgres์—์„œ ์ž๋ฌธ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” django_pglocks์ด ๋ชจ๋“ˆ ์‚ฌ์šฉํ•˜๊ณ  ์„œ๋ธŒ ํ”„๋กœ์„ธ์Šค์— ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์žฅ๊ณ  ๊ด€๋ฆฌ ๋ช…๋ นํ–ˆ๋‹ค.

Postgres์—์„œ ์ž๋ฌธ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. django_pglocks ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ณ  ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค์—์„œ celery beat๋ฅผ ์‹คํ–‰ํ•˜๋Š” Django ๊ด€๋ฆฌ ๋ช…๋ น์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ NFS๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ณธ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ž ๊ธˆ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ Postgres ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์ด ๋Š๊ธฐ๊ฑฐ๋‚˜ Postgres ์„œ๋ฒ„๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

@swt2c ์•„, ๋ฌผ๋ก  ๋งž์Šต๋‹ˆ๋‹ค! ์ผ์ข…์˜ ์ƒ์กด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‚ด๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ์ผ:

def _pre_exec():
    prctl.set_pdeathsig(signal.SIGTERM)

with advisory_lock(LOCK_ID) as acquired:
            assert acquired
            logging.info("Lock acquired: %s", acquired)
            p = subprocess.Popen(
                celery,
                shell=False,
                close_fds=True,
                preexec_fn=_pre_exec,
            )
            sys.exit(p.wait())

advisor_lock ๋Š” ์žฌ๊ท€๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ db๋ฅผ ํ™•์ธํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

In [8]:  with advisory_lock('foo') as acquired:
   ...:     print acquired
   ...:     while True:
   ...:        with advisory_lock('foo') as acquired:
   ...:           print acquired
   ...:        time.sleep(1)
   ...:       

# Yes, it does:

True
True
True
<shutdown the instsance>
InterfaceError: cursor already closed

๊ทธ๋ž˜์„œ ... ์ž ๊ธˆ/ํด๋ง์„ ๊ณ„์† ์žฌํš๋“ํ•˜๊ณ  ์‹คํŒจํ•˜๋ฉด ๋น„ํŠธ๋ฅผ ์ฃฝ์ด๋„๋ก ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋‚ด ๋ชฉ์ ์— ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ ๋™์‹œ ๋น„ํŠธ๋Š” ๋‚ญ๋น„์ ์ธ ์„ฑ๊ฐ€์‹ฌ์ด์ง€๋งŒ ๋ฌด๊ฒฐ์„ฑ ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ž‘์—…์„ ๊ถŒ๊ณ  ์ž ๊ธˆ์œผ๋กœ ๋ž˜ํ•‘ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ db๊ฐ€ ๋‹ค์šด๋˜๋ฉด ์–ด์จŒ๋“  ์ž‘์—…์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๋น„ํŠธ๋ฅผ DB์— ์ €์žฅํ•˜๊ณ  ์žˆ์ง€๋งŒ db๊ฐ€ ๋‹ค์šด ๋  ๋•Œ ๋น„ํŠธ๊ฐ€ ๋ฌด์—‡์„ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@ddevlin ์ €๋„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ์†”๋ฃจ์…˜

๊ทธ๋Ÿฌ๋‚˜ redbeat-2 ๊ฐ€ ๋‹ค์šด๋  ๋•Œ ๊ฐ๋…์ž๊ฐ€ redbeat-1 ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๋…ผ๋ฆฌ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ supervisor ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ autorestart=True ๋Š” ์ ์–ด๋„ ํ•œ ๋ฒˆ RUNNING ์ƒํƒœ์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ๊ทธ๋žจ์—๋งŒ ํšจ๊ณผ์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋‚ด Supervisor.conf์— celery beat redbeat.RedBeatScheduler ๋‘ ๊ฐœ์˜ program ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์‹œ์ž‘ํ•˜๋Š” ๊ฐ๋…์ž, ํ•œ beat ( beat-1 ) ์ž ๊ธˆ์„ ๋ฐ›๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ( beat-2 ) ๋ช‡ ๋ฒˆ ์‹œ์ž‘์„ ์‹œ๋„ํ•˜๊ณ  FATAL ์ƒํƒœ( Seems we're already running? ์˜ค๋ฅ˜ ํฌํ•จ).
  3. ์ด์ƒ์ ์œผ๋กœ๋Š” beat-1 ๊ฐ€ ์ค‘์ง€๋˜๋ฉด ๊ฐ๋…์ž๊ฐ€ beat-2 ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ทธ๋Ÿฌ๋‚˜ ์ฒ˜์Œ๋ถ€ํ„ฐ RUNNING ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, beat-1 ์ค‘์ง€ํ•˜๋ฉด ์ค‘์ง€๋˜๊ณ  ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—์„œ, ํ•ด๊ฒฐ์ฑ…์€ supervisorctl restart all ๋งค 5์ดˆ๋งˆ๋‹ค ๊ณ„์†ํ•˜๋Š” cron ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ƒ๊ฐ์„ ์–ป๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๋…์ž์™€์˜ ์ค‘๋ณต.

@harisibrahimkv ๋‹˜ , ๋ฌธ์ œ๋Š” ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ๋‘ ๊ฐœ์˜ ๋™์ผํ•œ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ERROR: Pidfile (celerybeat.pid) already exists. ์— ๋Œ€ํ•œ ๋กœ๊ทธ์— beat-2 ERROR: Pidfile (celerybeat.pid) already exists. ๊ฐ€ ํ‘œ์‹œ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๊นŒ? ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ๋‘ ๊ฐœ์˜ celery beat ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ด๋“ค ๊ฐ„์˜ ์žฅ์•  ์กฐ์น˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ ์ค‘๋ณต์„ฑ์„ ์œ„ํ•ด์„œ๋Š” ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” celery beat๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๊ฐ๋…์ž๊ฐ€ --pidfile ์ธ์ˆ˜๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋ณ„๋„์˜ pidfile์„ ์ œ๊ณตํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:

# beat-1 
celery beat --scheduler=redbeat.RedBeatScheduler --pidfile="beat-1.pid" ...
# beat-2
celery beat --scheduler=redbeat.RedBeatScheduler --pidfile="beat-2.pid" ...

๋‘ ์ธ์Šคํ„ด์Šค ๋ชจ๋‘ ๊ฐ๋…์ž ์•„๋ž˜์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘๋˜์–ด์•ผ ํ•˜์ง€๋งŒ ๋กœ๊ทธ ํŒŒ์ผ์„ ํ™•์ธํ•˜๋ฉด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์ž‘์—…์„ ์˜ˆ์•ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•˜๋ฉด ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ž‘์—… ์ผ์ •์„ ์ธ๊ณ„๋ฐ›๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ์…€๋Ÿฌ๋ฆฌ ์ž‘์—…์ž์™€ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ๋ฅผ ๊ฐ๋…ํ•˜์— ์‹คํ–‰ํ•˜๋Š” ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์˜ ์ž๋™ ํฌ๊ธฐ ์กฐ์ • ํ’€์„ ๊ฐ–๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํ˜ธ์ŠคํŠธ์—๋Š” ๋‹จ์ผ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์„ฑ์—์„œ celery beat๋Š” ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ž ๊ธˆ์„ ํš๋“ํ•˜์ง€ ์•Š์€ ๋ชจ๋“  celery beat ์ธ์Šคํ„ด์Šค๋Š” ํšจ๊ณผ์ ์œผ๋กœ ์ƒ์‹œ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋˜๋ฉฐ ์ž‘์—…์„ ์˜ˆ์•ฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ํ’€์˜ ๋ชจ๋“  ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ). ์ž ๊ธˆ์ด ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์ค‘์ง€๋˜๋ฉด(์˜ˆ: ํ’€์ด ์ถ•์†Œ๋˜๊ฑฐ๋‚˜ ํ’€์—์„œ ํ˜ธ์ŠคํŠธ์˜ ๋กค๋ง ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ) ๋Œ€๊ธฐ ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ž ๊ธˆ์„ ํš๋“ํ•˜๊ณ  ์˜ˆ์•ฝ ์ž‘์—…์„ ์ธ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

@ddevlin ๋‹ค์‹œ ๋Œ์•„์™€์„œ ์ธํ„ฐ๋„ท์„ ๋ฉ‹์ง„ ๊ณณ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์…”์„œ

  1. pidfile ๋น„ํŠธ๊ฐ€ ์ž‘๋™ํ–ˆ๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๊ฐ€ ์ค‘์ง€๋˜์—ˆ์„ ๋•Œ beat-2 ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๋„ˆ๋ฌด ๊ธฐ๋ปค์Šต๋‹ˆ๋‹ค. CELERYBEAT_MAX_LOOP_INTERVAL = 25 ๋น„ํŠธ์˜ ์‹œ๊ฐ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์…€๋Ÿฌ๋ฆฌ 3.x์—์„œ).

  2. ์˜ˆ, ์‹ค์ œ ์ค‘๋ณต์„ฑ์„ ์œ„ํ•ด ์ด ์„ค์ •์„ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์— ๋ชจ๋‘ ์ ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ค‘์ด์‹  ์„ค์ •์„ ์„ค๋ช…ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ž‘์—…์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. "๋™์ผํ•œ ์ธ์Šคํ„ด์Šค์˜ ๋‹ค์ค‘ ํ˜ธ์ŠคํŠธ" ์„ค์ •์€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋“ฏ์ด ์ด ์ˆ˜ํผ๋ฐ”์ด์ € ์„ค์ •์—์„œ ์žฅ์•  ์กฐ์น˜์˜ ๊ฐœ๋…์ด ์ž‘๋™ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒ˜์Œ์— ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋œปํ•œ ๊ฐ์‚ฌ,
์ธ๋„ ์•„๋Œ€๋ฅ™ ์ตœ๋‚จ๋‹จ์˜ ์ž‘์€ ๋งˆ์„์—์„œ. :)

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰