วิธีโหลดการตั้งค่า apache ใหม่สำหรับไซต์โดยไม่ต้องเริ่ม apache ใหม่


141

ฉันแก้ไขตัวแปรAllowOverrideสำหรับหนึ่งในเว็บไซต์ของฉันในไดเรกทอรีที่เปิดใช้งานไซต์ ฉันจะโหลดการกำหนดค่าใหม่โดยไม่ต้องรีสตาร์ท apache ได้อย่างไร เป็นไปได้ไหม?



1
ดูเหมือนว่าคำตอบทั้งหมดไม่ถูกต้อง
Tigran

คำตอบ:


182

ควรเป็นไปได้โดยใช้คำสั่ง

sudo /etc/init.d/apache2 reload

หวังว่าจะช่วย


11
ฉันค่อนข้างมั่นใจว่านี่ไม่ถูกต้อง ค้นหา init.d-script ของเซิร์ฟเวอร์ Ubuntu โหลดใหม่อ้างถึงการรีสตาร์ทอย่างนุ่มนวล ซึ่งหมายความว่าการรีโหลดนั้นแท้จริงแล้วคือการรีสตาร์ท แต่อย่างสง่างาม ความคิดเห็นของฉันคือ apache ไม่สามารถโหลดซ้ำได้โดยไม่รบกวนการบริการ
SteffenNielsen

4
คำตอบของ Aruman เป็นคำตอบที่ถูกต้อง สคริปต์เริ่มต้น Apache ส่วนใหญ่ส่ง SIGHUP ซึ่งเทียบเท่ากับ 'apachectl restart' ซึ่ง OP ขอให้หลีกเลี่ยงโดยเฉพาะ สคริปต์เริ่มต้น Apache อื่นส่ง SIGUSR1 ซึ่งเทียบเท่ากับ 'apachectl graceful' ซึ่งเป็นการเริ่มต้นใหม่ แต่ทำได้ดีกว่าและเป็นคำตอบของ Aruman
ไบรอัน Larsen

@SteffenNielsen ฉันคิดว่าคุณพูดถูก ... บางคนก็ใช้ได้ดีกับการใช้ load balancer, ปิดการใช้งานที่จะเริ่มต้นใหม่เริ่มต้นใหม่จัดการกับ db versioning แล้วทำแบบเดียวกันกับเซิร์ฟเวอร์ / คอนเทนเนอร์ apache อื่น K8s แก้ปัญหาเหล่านี้ได้บ้าง
เรย์ Foss

1
ตกลงนี่คือสิ่งที่เกิดขึ้นกระบวนการ apache2 หลักไม่เปลี่ยนแปลง แต่เด็กหรือคนงาน (ฉันไม่ทราบคำศัพท์ที่ถูกต้อง) เริ่มต้นใหม่ทั้งหมด PID เหล่านั้นในความเป็นจริงการเปลี่ยนแปลง
Elijah Lynn

1
และฉันคิดว่าสง่างามในกรณีนี้ก็หมายความว่าคนงานเด็กเหล่านั้นเสร็จสิ้นการให้บริการตามคำขอของพวกเขาก่อนที่จะถูกฆ่าตายและเกิดใหม่
Elijah Lynn


28

ทำ

apachectl -k graceful

ตรวจสอบลิงค์นี้สำหรับข้อมูลเพิ่มเติม: http://www.electrictoolbox.com/article/apache/restart-apache/


18
การดำเนินการนี้จะเริ่มต้น Apache httpd daemon ใหม่ซึ่งเป็นคำถามที่ขอให้หลีกเลี่ยงเป็นพิเศษ
cs01

6
@ cs01 คุณอ่านที่ไหน httpd daemon จะถูกรีสตาร์ท? ทุกสิ่งที่ฉันอ่านในลิงก์ที่ให้ไว้ในคำตอบบอกว่าสิ่งต่าง ๆ เช่นapachectl graceful: Gracefully restarts the Apache daemon by sending it a SIGUSR1. If the daemon is not running, it is started. This differs from a normal restart in that currently open connections are not aborted.
Tyler Collier

5
ประโยคแรกของเอกสารที่คุณโพสต์บอกว่าใช่มั้ย
cs01

3
@ cs01 คุณต้องเข้าใจว่าทำไมพวกเขาถึงเป็นกังวลเกี่ยวกับการรีสตาร์ท ไม่ได้ระบุไว้ แต่ฉันเดาว่าพวกเขาไม่ต้องการให้การเชื่อมต่อถูกยกเลิกแทนที่จะรีสตาร์ทในตัวเอง การรีสตาร์ทที่งดงามจะทำได้ดีในกรณีส่วนใหญ่ หากมีการเชื่อมต่อที่ยาวนานนี้อาจเป็นปัญหา คุณต้องมีคำจำกัดความที่ดีของการเริ่มต้นใหม่เช่นกันการรีสตาร์ทที่สง่างามทั้งหมดจะเริ่มต้นกระบวนการของพาเรนต์ใหม่นั่นคือ pid จะไม่เปลี่ยนแปลงซึ่งการรีสตาร์ทตามปกติจะทำให้ต้นไม้กระบวนการทั้งหมดหายไปและวางไข่ใหม่ ดังนั้นคำตอบของ Tyler Collier นั้นถูกต้องตามกฎหมายอย่างสมบูรณ์
krad

7

อัปเดตสำหรับ Apache 2.4, สำหรับที่ไม่ใช่ systemd (เช่น CentOS 6.x, Amazon Linux AMI) และสำหรับ systemd (เช่น CentOS 7.x):

มีสองวิธีในการมีกระบวนการ apache โหลดการกำหนดค่าใหม่ขึ้นอยู่กับสิ่งที่คุณต้องการทำกับเธรดปัจจุบันทั้งแนะนำให้ออกเมื่อไม่ได้ใช้งานหรือฆ่าพวกเขาโดยตรง

โปรดทราบว่า Apache แนะนำให้ใช้apachectl -kเป็นคำสั่งและสำหรับ systemd คำสั่งจะถูกแทนที่ด้วยhttpd -k

apachectl -k graceful หรือ httpd -k graceful

Apache จะแนะนำเธรดให้ออกเมื่อไม่ได้ใช้งานจากนั้น apache จะโหลดการกำหนดค่าใหม่ (ไม่ออกจากตัวเอง) ซึ่งหมายความว่าสถิติจะไม่ถูกรีเซ็ต

apachectl -k restart หรือ httpd -k restart

สิ่งนี้คล้ายกับการหยุดในกระบวนการนั้นฆ่าเธรดของมัน แต่จากนั้นกระบวนการจะโหลดไฟล์การกำหนดค่าแทนที่จะฆ่าตัวเอง

ที่มา: https://httpd.apache.org/docs/2.4/stopping.html


apache 2.4.39 (win) ไม่รองรับhttpd -k gracefulเท่านั้นhttpd -k restart: httpd /?=>-k restart : tell running Apache to do a graceful restart
Andreas Dietrich
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.