سؤال إعادة تحميل التكوين Nginx دون التوقف


أستخدم nginx كوكيل معكوس. كلما قمت بتحديث التكوين لذلك باستخدام

sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
sudo "kill -s HUP `cat /var/run/nginx.pid`"

أواجه فترة توقف قصيرة. كيف يمكنني تجنب ذلك؟


95
2018-04-11 17:13


الأصل


هل من المفترض أن تكون أوامر سطر الأوامر؟ لم أر أبدا أي شخص يلف قيادة sudo بأكملها في اقتباسات من هذا القبيل ، قد لا يكون ذلك ضروريا. - brianmearns
مجرد تعليق عام: أعتقد أن الممارسة القياسية / الموصى بها هي إنشاء رابط ناعم / رمزي لتهيئة موقعك ضمن sites-enabledلا نسخها. لا تتعلق بمشكلتك الخاصة ، ولكن قد ترغب في النظر في ذلك. - brianmearns
يجب أن لا تواجه توقفًا. kill HUP هي طريقة للقيام بإعادة تحميل رشيقة في nginx. - Jonathan Vanasco


الأجوبة:


يركض service nginx reload أو /etc/init.d/nginx reload

وسوف تفعل إعادة تحميل الساخنة من التكوين دون التوقف. إذا كانت لديك طلبات معلقة ، فستكون هناك عمليات nginx تستمر في التعامل مع هذه الاتصالات قبل أن تموت ، لذا فهي طريقة رائعة لإعادة تحميل التهيئة.

في بعض الأحيان قد ترغب في الإقلاع مع sudo 


155
2018-04-11 17:24



يجب على كلاهما القيام بما يقوله السؤال بالضبط: أرسل SIGHUP إلى العملية الرئيسية nginx. لا ينبغي أن يكون هناك فرق. nginx.org/en/docs/control.html - Gnarfoz
عندما أقوم بإصدار الأمر على CentOS فإنه يبقى قائلاً "Usage /etc/init.d/nginx (start..stop ... restart..reload)" .. وهذا بالضبط كيف استخدمته. داخل الملف / init.d/nginx لقد وجدت قتل -HUP cat $PIDFILE || صدى - "لا يمكن إعادة تحميل" - mashup
هل تعرف ما الفرق بين service nginx reloadو nginx -s reload؟ إذا قمت بتشغيل السابق ، أحصل على هذا الإخراج: Reloading nginx configuration: nginx.، ولكن لم يتم تحديث التغييرات الخاصة بي. إذا قمت بتشغيل هذا الأخير ، لم أحصل على أي إخراج ، ولكن تنعكس التغييرات. - Ryan Quinn
لقد حاولت هذا بعد إضافة log_not_found التوجيه ولكن وجدت أن اضطررت إلى القيام بالفعل إعادة تشغيل للحصول عليها للعمل. أعتقد أن إعادة التحميل لا تعمل لجميع التوجيهات؟ - mydoghasworms


يركض /usr/sbin/nginx -s reload

نرى http://wiki.nginx.org/CommandLine لمزيد من خيارات سطر الأوامر.


57
2017-07-27 13:46



وأخيرا ، الأمر الذي يعمل في دبيان جيسي. - danger89
هذه طريقة أفضل. لأن الخادم الخاص بك لا أسفل إذا كانت إعداداتك تحتوي على أخطاء (تظهر فقط أخطاء في هذه الحالة). - Mir-Ismaili


لا ، أنت غير صحيح ، ليس من المفترض أن تواجه أي توقف عن العمل مع الإجراء الذي تصفه. (يمكن Nginx لا إعادة التكوين فقط على الطاير على الإطلاق دون أي توقف ، ولكن حتى ترقية الملف التنفيذي على الطاير ، لا يزال دون أي توقف).

حسب http://nginx.org/docs/control.html#reconfigurationارسال HUP تقوم الإشارة إلى nginx بالتأكد من أنها تؤدي عملية إعادة تشغيل رائعة ، وإذا كانت ملفات التكوين غير صحيحة ، فسيتم التخلي عن الإجراء بأكمله ، وستترك مع nginx كما كان قبل إرسال HUP إشارة. في أي وقت يجب أن يكون أي وقت توقف ممكن.

من أجل nginx لإعادة قراءة ملف التكوين ، يجب إرسال إشارة HUP إلى العملية الرئيسية. تتحقق العملية الرئيسية أولاً من صلاحية بناء الجملة ، ثم تحاول تطبيق تكوين جديد ، وهو فتح ملفات السجل ومآخذ الاستماع الجديدة. إذا فشل هذا ، فإنه يعود التغييرات ويواصل العمل مع التكوين القديم.


8
2018-06-22 16:58





في العادة ، لا ينبغي أن يؤثر إعادة تحميل ملف التكوين الخاص بالخدمة على الخدمة قيد التشغيل. ومع ذلك ، هذا يعتمد على كيفية SIGHUP تتم معالجة الإشارة.

إذا كانت هناك خدمة معينة تواجه فترة تعطل أثناء إعادة التحميل ، فيمكن التحايل على ذلك من خلال تشغيل الخدمة نفسها على خوادم متعددة يفضل استخدام موازن تحميل. في هذه الحالة ، يمكنك إخراج خادم واحد في كل مرة وإعادة تحميله / إعادة تشغيله. بعد ذلك ، يمكن إعادة إضافته بعد التأكد من أنه موافق.


2
2018-04-11 17:24



في حين أن هذا لا يجيب بشكل مباشر على السؤال ، فإن هذا بالتأكيد سيناريو أفضل الممارسات هو أن OP ستكون ذكية لمتابعة لتجنب التوقف عن العمل بشكل عام. - Andrew M.
تفاصيل حول كيفية معالجة nginx للإشارات المختلفة: nginx.org/en/docs/control.html - Gnarfoz