บริการสคริปต์ Linux init - ล่าช้าจนกว่าซ็อกเก็ต mysql พร้อม


-1

หนึ่งไปเกี่ยวกับการล่าช้าสคริปต์บริการ init ใน Linux จนกว่าซ็อกเก็ต MySQL อยู่? คำสั่ง sleep ในสคริปต์เริ่มต้นทำให้กระบวนการบูตทั้งหมดล่าช้าหรือเป็นสคริปต์เริ่มต้นที่ดำเนินการโดยเธรดอื่นเพื่อป้องกันการบล็อกหรือไม่

ฉันพยายามรับบริการ PolicyD ของฉันเพื่อเริ่มต้นหลังจาก MySQL ขณะนี้มันทำใน /etc/rc5.d เนื่องจากสคริปต์ของ PolicyD เริ่มต้นด้วย S06 ในขณะที่ MySQL เริ่มต้นด้วย S04 ปัญหาคือว่าเมื่อสคริปต์ init ของ policyd ทำงานหาก /var/run/mysqld/mysqld.sock ไม่มีอยู่แสดงว่าไม่ทำงาน ถ้าฉันหน่วงเวลาสคริปต์เป็นเวลา 60 วินาทีมันใช้งานได้ดี (ให้ MySQL มีเวลาเพียงพอในการเริ่มต้นระบบและซ็อกเก็ตของมัน) แต่ฉันไม่ต้องการหยุดกระบวนการบูตทั้งหมดชั่วคราวในระยะเวลานานใช่ไหม

ฉันไม่คิดว่า MySQL มีชื่อสิ่งอำนวยความสะดวกเสมือนชื่อ LSB เพื่อชะลอการเริ่มต้นของ policyd หรือไม่ ( https://wiki.debian.org/LSBInitScripts )

วิธีที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร? ระบบ init นั้นมีหลายเธรดตั้งแต่สคริปต์เริ่มต้นทำงาน daemons และโปรแกรมอื่นที่สามารถวนซ้ำได้? ฉันสับสนเล็กน้อย ...

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


คุณยังคงใช้สคริปต์เริ่มต้นแบบเก่าไม่ใช่หน่วย systemd ใช่ไหม
Michael Hampton

สคริปต์ systemd แตกต่างกันอย่างไร บริการ Ubuntu 16.04 ยังคงทำงานเหมือนเดิม มันใช้ systemd สำหรับการบู๊ต แต่มันก็ยังคงรันสคริปต์ init ตัวเก่าเหมือนกันกับการทุบตีบล็อก LSB ที่คอมเม้นต์เพื่อบอก systemd ว่าจะทำอย่างไร? ฉันไม่สนใจจริงๆ ฉันแค่ต้องการเรียกใช้บริการที่รอจนกว่า MySQL จะพร้อม
OwN

เพราะนี่เป็นเรื่องง่ายเล็กน้อยเมื่อบริการทั้งสองใช้ systemd units เพื่อเริ่มต้นแทนที่จะเป็นสคริปต์แบบเก่า อูบุนตูเป็นผู้จัดจำหน่ายรายใหญ่คนสุดท้ายที่เปลี่ยนมาใช้ systemd และดูเหมือนว่าจะเป็นอย่างน้อยอีกสองสามปีก่อนที่พวกเขาจะทำสิ่งที่เป็นประโยชน์ หากพวกเขาเคยทำ พวกเราที่เหลือสามารถใช้ประโยชน์จากสิ่งนี้ได้เป็นเวลาหลายปี พิจารณาเปลี่ยนไปใช้การกระจายอื่น
Michael Hampton

ระบบ init ที่เก่ากว่านั้นดีกว่าอยู่ดี มันง่ายมาก
OwN

แต่มันจะยังคงมีปัญหาเดียวกัน PolicyD daemon ของฉันต้องทำงานเมื่อซ็อกเก็ต MySQL พร้อมใช้งาน ขั้นตอนนี้ใช้เวลานาน ... ลำดับการบู๊ตนั้นถูกต้อง แต่ภูตของฉันถูกกำหนดค่าเริ่มต้นเร็วเกินไปหลังจากให้ MySQL มีโอกาสวางไข่ซ็อกเก็ต
OwN

คำตอบ:


0

ฉันคิดว่าคุณมี systemd ในการกำจัดด้วย Ubuntu 16.04 มิฉะนั้นคุณสามารถอ้างถึงระบบพุ่งพรวดที่คุณสามารถเขียนไฟล์ conf สำหรับบริการของคุณ ในไฟล์นี้คุณสามารถระบุว่าบริการเริ่มต้นหลังจากบริการหนึ่งอย่างหรือมากกว่านั้น

ฉันพบบทความเกี่ยวกับการพุ่งพรวดที่มีประโยชน์มากDigital Ocean - ระบบพุ่งพรวดเหตุการณ์


ขอบคุณฉันอ่านบทความ แต่พูดถึงเรื่องงานเท่านั้น ฉันมีภูตที่ฉันต้องการเริ่มต้นหลังจากซ็อกเก็ต MySQL อยู่ที่นั่นและพร้อม ภูตของฉันเริ่มต้นหลังจาก MySQL daemon แล้ว แต่ซ็อกเก็ต MySQL นั้นยังคงไม่สามารถใช้งานได้หลังจากที่ MySQL เริ่มทำงานเมื่อ005005วินาทีเมื่อสคริปต์ daemon ของฉันทำงาน ปรากฏว่า systemd ไม่ตรงกันแม้ว่าเวลารอควรจะตกลงในสคริปต์ init สำหรับการเริ่ม / หยุด?
OwN

ลองแก้ไขไฟล์ <your daemon> .services และวางไว้ที่ส่วนท้ายของ [Unit]: After = MySQL.service จากนั้นรีสตาร์ททั้งหมดและทดสอบว่าซ็อกเก็ตของคุณพร้อมหรือยังก่อนที่ daemon ของคุณจะเริ่มทำงาน
Oroki

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