שאלה תצורת 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 זה אומר אומר "שימוש /etc/init.d/nginx (start..stop ... הפעל מחדש .. לטעון)" .. וזה בדיוק איך השתמשתי בו. בתוך הקובץ /init.d/nginx מצאתי להרוג -HUP cat $PIDFILE || הד -N "לא יכול לטעון מחדש" - 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