ใน Ubuntu 10.04 ฉันต้องเริ่มบริการด้วยการพุ่งพรวด แต่เฉพาะเมื่อ mysql เริ่มทำงาน
ปัญหาคือว่าตัวเองไม่ได้จัดการ mysql โดยพุ่งพรวดดังนั้นฉันไม่สามารถใช้คุณสมบัติ "เริ่มต้นที่"
ฉันควรทำอย่างไร
ใน Ubuntu 10.04 ฉันต้องเริ่มบริการด้วยการพุ่งพรวด แต่เฉพาะเมื่อ mysql เริ่มทำงาน
ปัญหาคือว่าตัวเองไม่ได้จัดการ mysql โดยพุ่งพรวดดังนั้นฉันไม่สามารถใช้คุณสมบัติ "เริ่มต้นที่"
ฉันควรทำอย่างไร
คำตอบ:
คุณมีตัวเลือกน้อย:
1) ทำ mysql แจ้งให้ทราบถึงการเริ่มต้นโดยเริ่มจากการปล่อยเหตุการณ์
initctl emit mysql-started
"หรือคล้ายกัน
ซึ่งอาจได้รับการจัดการโดยการเพิ่มการภาวนาเพื่อinitctl
/etc/init.d/mysql
2) ปิดการใช้งาน mysql จาก runlevels SysV ปกติและสร้างงาน wrapper Upstart ที่เริ่มต้น (ไม่ใช่สิ่งนี้ไม่ได้จัดการกับการหยุด - เพียงตัวอย่าง):
cat >>/etc/init/mysql-sysv.conf<<EOT
# wait for SysV job to finish
start on stopped rc
exec /etc/init.d/mysql start
EOT
จากนั้นให้มีงานของคุณ " start on started mysql-sysv
"
ปัญหาที่นี่คือคุณจะประสบปัญหาหากมีคน (หรือเครื่องมือระบบบางอย่างโดยอัตโนมัติ) เพิ่ม/etc/rc?.d
ลิงค์ไปยัง/etc/init.d/mysql
สคริปต์บริการเดิม นอกจากนี้คุณอาจพบว่า mysql ยังไม่พร้อมจนกว่าจะถึงเวลาหลังจากที่ pid หลักเริ่มทำงาน ฐานข้อมูลมีปัญหาเนื่องจากอาจต้องใช้เวลาสักครู่ในการ "ออนไลน์" แม้ว่าจะเริ่มแล้วก็ตาม
3) สร้างงานพุ่งพรวด ("บริกร") ที่ "เริ่มทำงานเมื่อหยุด rc" (เช่นเริ่มเมื่องาน SysV ทั้งหมดได้อ้างว่าเสร็จแล้ว) จากนั้นโพลรอให้ mysql พร้อมออกจากนั้น ให้งานของคุณ "บริกรหยุดทำงาน"
4) แปลง mysql เป็นงานพุ่งพรวด (ตัวเลือกที่ดีที่สุด) มีจุดเริ่มต้นสำหรับการกำหนดค่า mysql พุ่งพรวดที่นี่: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu
os.system('/sbin/initctl emit consul-finished')
จากนั้นเริ่มบริการอื่น ๆ โดยstart on consul-finished
initctl emit cloud-init-finished
บริการ sysv เพื่อให้สามารถเชื่อมต่อ
ผมขอแนะนำให้เริ่มต้นงานพุ่งพรวดของคุณหลังจากที่ทุกงานที่ไม่ธรรมดาเสร็จแล้ว:
start on started rc
/etc/init/rc.conf
เป็นสิ่งที่เริ่มงานที่ไม่ใช่การพุ่งพรวดจากภายในเริ่มต้น
อุปกรณ์ประกอบฉาก: /server//a/533481
วิธีการเกี่ยวกับการใช้
pre-start exec /etc/init.d/mysql start
ภายในงานพุ่งพรวดของคุณ!