วิธีทำ uwsgi ที่สวยงามทำการรีโหลดผ่านสคริปต์ทุบตี


9

ฉันมีแอพพลิเคชั่น django ซึ่งใช้สคริปต์ทุบตี ฉันต้องการเซิร์ฟเวอร์ nginx เพื่อเริ่มต้นใหม่ดังนั้นฉันจึง/etc/init.d/nginx reloadทำงานได้ดี ฉันใช้restart uwsgiuwsgi แล้ว แต่ฉันต้องทำการรีโหลดอย่างนุ่มนวลแทนการรีสตาร์ทเซิร์ฟเวอร์อย่างหนัก

ฉันจะทำสิ่งนี้ได้อย่างไร


ฉันกำลังทำงานทุบตีฟังก์ชั่นผ่านreload uwsgi subprocess.popenดูเหมือนว่าจะทำการโหลดซ้ำกระบวนการที่เรียกใช้กระบวนการย่อยไม่ใช่ไซต์ทั้งหมดที่โฮสต์โดยอินสแตนซ์ uwsgi importing uwsgiและการรันuwsgi.reloadดูเหมือนจะส่งผลกระทบต่อกระบวนการเรียกเท่านั้น มีสวิตช์สำหรับ uwsgi ผ่าน python หรือ bash ที่อนุญาตให้เริ่มต้นกระบวนการ uwsgi ทั้งหมดใหม่ได้หรือไม่

คำตอบ:


0

คุณสามารถทำได้ในหลาม

import uwsgi
uwsgi.reload()

uwsgi.reload () ทำงานเป็นระยะ ๆ ดูเหมือนว่าจะรีสตาร์ทเซิร์ฟเวอร์ก่อนที่กระบวนการของฉันจะเสร็จสิ้น ฉันใช้งานผ่านแอปพลิเคชัน django และต้องการให้รีสตาร์ทเซิร์ฟเวอร์ทั้งหมด
darren

10

SIGHUP

คุณสามารถรีสตาร์ท uWSGI โดยส่งสัญญาณ SIGHUP ไปยังกระบวนการ uWSGI ของคุณดังนี้:

kill -HUP <process-id>

หากคุณต้องการทำสิ่งนี้โดยอัตโนมัติในสคริปต์ทุบตีคุณสามารถให้ uWSGI เขียนเป็น id กระบวนการโดยระบุpidfileตัวเลือกเช่น:

--pidfile=/tmp/uwsgi.pid

จากนั้นคุณสามารถโหลดกระบวนการโดย:

uwsgi --reload /tmp/uwsgi.pid

สัมผัสโหลด

คุณสามารถเริ่ม uWSGI ด้วยtouch-reloadอาร์กิวเมนต์ซึ่งระบุไฟล์ที่เมื่อถูกแตะทำให้ uWSGI ทำการโหลดซ้ำ:

--touch-reload=/some/file

จากนั้น uWSGI จะโหลดซ้ำเมื่อคุณสัมผัสไฟล์:

touch /some/file

จำไว้ว่าคุณสามารถโหลด uWSGI ใหม่ได้เฉพาะเมื่อมันทำงานด้วยโหมดกระบวนการหลัก แต่โดยปกติจะเป็นเช่นนั้น

ข้อมูลเพิ่มเติม: http://uwsgi-docs.readthedocs.io/en/latest/Management.html#reloading-the-server

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.