์ฌ์ฉ์์๊ฒ ํด๋ฌ์คํฐ ์ ์ฒด์ ํ๋์ celerybeat ์ธ์คํด์ค๋ง ์กด์ฌํ๋๋ก ์๊ตฌํ๋ฉด ์๋นํ ๊ตฌํ ๋ถ๋ด์ด ๋ฐ์ํฉ๋๋ค(๋จ์ผ ์คํจ ์ง์ ์ ์์ฑํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์์ ์ ๋ถ์ฐ ๋ฎคํ ์ค๋ฅผ ๋กค๋งํ๋๋ก ๊ถ์ฅ).
celerybeat๋ ๋ถ์ฃผ์ํ ๋์์ฑ์ ๋ฐฉ์งํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๊ฑฐ๋ ๋ฌธ์์์ ๋ชจ๋ฒ ์ฌ๋ก ์ ๊ทผ ๋ฐฉ์์ ์ ์ํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ 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
์ํ์ ๋ค์ด๊ฐ ํ๋ก๊ทธ๋จ์๋ง ํจ๊ณผ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋ด ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
celery beat
redbeat.RedBeatScheduler
๋ ๊ฐ์ program
๊ฐ ์์ต๋๋ค.beat
( beat-1
) ์ ๊ธ์ ๋ฐ๊ณ ์คํํ๋ ๋์ ๋ค๋ฅธ ( beat-2
) ๋ช ๋ฒ ์์์ ์๋ํ๊ณ FATAL
์ํ( Seems we're already running?
์ค๋ฅ ํฌํจ).beat-1
๊ฐ ์ค์ง๋๋ฉด ๊ฐ๋
์๊ฐ beat-2
์์ํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.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 ๋ค์ ๋์์์ ์ธํฐ๋ท์ ๋ฉ์ง ๊ณณ์ผ๋ก ๋ง๋ค์ด์ฃผ์ ์
pidfile
๋นํธ๊ฐ ์๋ํ๊ณ ๋ค๋ฅธ ํ๋๊ฐ ์ค์ง๋์์ ๋ beat-2
์ด ์์
์ ์ํํ๋ ๊ฒ์ ๋ณด๊ณ ๋๋ฌด ๊ธฐ๋ปค์ต๋๋ค. CELERYBEAT_MAX_LOOP_INTERVAL = 25
๋นํธ์ ์๊ฐ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค(์
๋ฌ๋ฆฌ 3.x์์).
์, ์ค์ ์ค๋ณต์ฑ์ ์ํด ์ด ์ค์ ์ ๋ค๋ฅธ ์ธ์คํด์ค์ ๋ชจ๋ ์ ์ฉํ ๊ณํ์ ๋๋ค. ์ฌ์ฉ ์ค์ด์ ์ค์ ์ ์ค๋ช ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๊ธ ์์ ์ ๋ค์ด๊ฐ๋๋ค. "๋์ผํ ์ธ์คํด์ค์ ๋ค์ค ํธ์คํธ" ์ค์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ฏ์ด ์ด ์ํผ๋ฐ์ด์ ์ค์ ์์ ์ฅ์ ์กฐ์น์ ๊ฐ๋ ์ด ์๋ํ๋์ง ์ฌ๋ถ๋ฅผ ์ฒ์์ ๊ฒ์ฆํ๋ ๊ฒ์ด์์ต๋๋ค.
๋ฐ๋ปํ ๊ฐ์ฌ,
์ธ๋ ์๋๋ฅ ์ต๋จ๋จ์ ์์ ๋ง์์์. :)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@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
). ๋ถํํ๋ ์์ ๊ด๋ จ ์ฝ๋๋ฅผ ๊ณต์ ํ ์๋ ์์ง๋ง ์ผ๋ฐ์ ์ธ ๊ตฌํ์ ๋ํ ์ถ๊ฐ ์ง๋ฌธ์ ๋ต๋ณํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.