อะไรคือความแตกต่างระหว่าง“ การรีสตาร์ทเซอร์วิส” และ“ การรีโหลดเซอร์วิส”


74

ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างและservice restart [someservice] service reload [someservice]ฉันเข้าใจว่า "เริ่มต้นใหม่" เริ่มบริการใหม่ในขณะที่ "โหลดใหม่" โหลดการกำหนดค่าใหม่ แต่ฉันไม่เข้าใจความหมายเชิงปฏิบัติของสิ่งนี้ดีพอที่จะกำหนดว่าฉันควรใช้งานอะไรในบริบทที่กำหนด

ตัวอย่าง: คู่มือที่สุดที่ผมเคยอ่านสำหรับการตั้งค่า PostgreSQL บอกว่าเมื่อฉันได้แก้ไข postgresql.conf และ pg_hba.conf sudo service postgresql restartที่จะอนุญาตให้เชื่อมต่อระยะไกลที่ฉันควรจะออก อย่างไรก็ตามหากฉันคาดเดาว่าจะใช้ตามคำอธิบายข้างต้นฉันจะเลือก "โหลดซ้ำ"

ในกรณีที่เป็นเรื่องสำคัญฉันใช้งาน Ubuntu 11.10 - แม้ว่าฉันจะคาดหวังว่าจะสามารถใช้คำอธิบายได้ตามปกติ


2
สองสามปีที่ผ่านมาฉันใช้เซิร์ฟเวอร์กับผู้ใช้หลายพันคน การรีสตาร์ท Apache ไม่รวดเร็วไม่ว่าด้วยเหตุผลใดมันจะใช้เวลาประมาณ 3 นาทีในการรีสตาร์ท apache (เหตุผล) อย่างไรก็ตามถ้าเซิร์ฟเวอร์ไม่ทำงานเป็นเวลา 3 นาทีเจ้านายของฉันจะได้รับโทรศัพท์ประมาณ 800 ครั้ง ด้วยบริการโหลดซ้ำโทรศัพท์ 0 ครั้ง นั่นคือความแตกต่าง
j0h

คำตอบ:


41

สิ่งที่คุณพูดถูกต้องreloadบอกให้บริการโหลดไฟล์การกำหนดค่าอีกครั้ง นั่นหมายความว่าควรจะเพียงพอที่จะโหลดการกำหนดค่าใหม่ อย่างไรก็ตามอาจมีบริการบางอย่างที่ "ไม่ปฏิบัติตามกฎ" หรือจะไม่โหลดไฟล์กำหนดค่าใหม่ restartเนื่องจากการนี้คุณอาจปลอดภัยมากขึ้นด้วย ฉันไม่ได้ใช้เป็นการส่วนตัวpostgresqlดังนั้นฉันไม่รู้


1
ในขณะเดียวกันก็มีreload-or-restart
Suuuehgi

สำหรับ PostgreSQL คุณสามารถใช้การเปลี่ยนแปลงกับ /etc/postgresql/version/main/postgresql.conf ด้วยการโหลดซ้ำ การนำการเปลี่ยนแปลงไปใช้กับ pg_hba.conf ต้องมีการรีสตาร์ท
Aidan Melen


8

reloadไม่ได้ทั้งหมดสนับสนุนบริการ สำหรับผู้ที่ทำเช่นนั้นมักจะดีกว่าที่จะเริ่มต้นใหม่ (เช่นโหลดใหม่ทำให้เกิดการหยุดทำงานน้อยลงหรือไม่มีเลย)

คู่มือนโยบาย Debian ระบุว่าทุก/etc/init.d/สคริปต์ควรสนับสนุนการforce-reloadกระทำซึ่งหมายความreloadว่าบริการสนับสนุนหรือไม่และrestartหากบริการนั้นไม่รองรับการโหลดซ้ำ

ฉันไม่แน่ใจว่าสิ่งที่แปลเข้าสู่โลกสมัยใหม่ที่ก้าวล้ำของ Ubuntu


1
คู่มือนโยบาย Debian นั้นเป็นลิงค์ที่มีประโยชน์จริงๆขอบคุณ
ไม่ใช่ปะ

1
รองรับการโหลดซ้ำมากที่สุดหากไม่ผ่านบริการระบบให้คิด /etc/init.d/SomeProgram โหลดซ้ำ
j0h

4

หากต้องการขยายعبدالنورالتوميคำตอบด้วยประสบการณ์ของฉันกับ systemd

ใน systemd เมื่อใดก็ตามที่กระบวนการเริ่มต้นมันจะทำงานภายในบริบทของ systemd ตัวอย่างที่ชัดเจนที่สุดของเรื่องนี้คือกับตัวแปรสภาพแวดล้อมที่กำหนดไว้ในไฟล์หน่วยของมัน

ดังนั้นเมื่อคุณส่งsystemctl reload [someservice]สัญญาณมันจะส่งสัญญาณไปยังบริการเพื่อโหลดตัวเองใหม่อย่างสง่างามหากได้รับการสนับสนุน หากไม่เป็นเช่นนั้นกระบวนการก็จะเพิกเฉยต่อสัญญาณ สิ่งนี้สามารถกำหนดค่าได้

ฉันหมายถึงอะไรอย่างสง่างาม? เพื่อเริ่มคนงานใหม่ด้วยการกำหนดค่าใหม่หรือรหัสและหยุดคนงานเก่าเมื่อพวกเขาเสร็จสิ้นการให้บริการการร้องขอปัจจุบันถ้ามี

และถ้าคุณทำให้systemctl restart [someservice]มันจะบอก systemctl ที่จะบอกบริการที่จะหยุดทำลายบริบท systemd ปัจจุบันสร้างใหม่และเรียกใช้บริการอีกครั้ง สิ่งนี้เหมาะสมสำหรับการรีโหลดตัวแปรสภาวะแวดล้อมในบริบทของ systemd หรือหากไม่รองรับการรีโหลด

หวังว่านี่จะกระจ่างเล็กน้อยและถ้าฉันผิดในบางสิ่งโปรดแจ้งให้เราทราบ


0

ปัจจุบันหากบริการต้องการเตะ (เช่นเปลี่ยนไฟล์กำหนดค่า) คุณสามารถแจ้งเตือนบริการได้ แต่สิ่งนี้จะนำไปสู่การรีสตาร์ท มันจะดีถ้ามีการโหลดซ้ำถ้าบริการกำลังทำงานอยู่แล้ว (แม้ว่าฉันคิดว่ามีบางอย่างที่ต้องใช้บริการที่ต้องรีสตาร์ทสำหรับบางไฟล์

ตัวอย่างที่ซับซ้อนที่สุดที่ฉันนึกได้คืออาปาเช่ โดยปกติคุณสามารถขอให้โหลดซ้ำได้ แต่บางครั้งคุณจำเป็นต้องขอให้รีสตาร์ทแทน (หากคุณเพิ่ม / ลบโมดูลเช่น)


0

postgres เป็นตัวอย่างที่ดีสำหรับความแตกต่างที่สำคัญระหว่างการรีโหลดและรีสตาร์ทเนื่องจากในภายหลังจะต้องตัดการเชื่อมต่อฐานข้อมูลไคลเอนต์ทั้งหมด

เมื่อการเชื่อมต่อที่ไม่ควรย้อนกลับคุณสามารถหยุดให้บริการโดยไม่ต้อง "--force" ในตอนแรกโดยใช้pg_ctlcluster

ใน/etc/postgres/{version}/{dbname}/postgresql.confและที่http://www.postgresql.org/docs/manuals/ทุกพารามิเตอร์มีหมายเหตุเช่น "พารามิเตอร์นี้สามารถตั้งค่าได้ที่เซิร์ฟเวอร์เริ่มต้นเท่านั้น "

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