พุ่งพรวด: เริ่มให้บริการหลังจากกระบวนการที่ไม่เริ่มต้นขึ้นแล้ว


11

ใน Ubuntu 10.04 ฉันต้องเริ่มบริการด้วยการพุ่งพรวด แต่เฉพาะเมื่อ mysql เริ่มทำงาน

ปัญหาคือว่าตัวเองไม่ได้จัดการ mysql โดยพุ่งพรวดดังนั้นฉันไม่สามารถใช้คุณสมบัติ "เริ่มต้นที่"

ฉันควรทำอย่างไร

คำตอบ:


15

คุณมีตัวเลือกน้อย:

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


1
หลังจากมองไปรอบ ๆ คำตอบนี้จะสรุปตัวเลือกทั้งหมดที่ฉันมี นอกจากนี้ขอขอบคุณสำหรับการชี้ให้เห็นช่องว่างระหว่าง "เริ่ม mysql" และเวลาที่ mysql ใช้งานได้จริง ลองดูว่า # 4 ลองไปแล้วหรือยัง
Falken

ตัวเลือก 3 ต้องใช้ "start on waiter ที่เริ่มต้น" ไม่หยุด
adeandrade

ตัวเลือกที่ 1 เหมาะกับแบบจำลองของเราดี! ก่อนอื่นเราดาวน์โหลดสคริปต์ upstart ทั้งหมดจากเซิร์ฟเวอร์ config ผ่านสคริปต์ python ที่ทำงานos.system('/sbin/initctl emit consul-finished')จากนั้นเริ่มบริการอื่น ๆ โดยstart on consul-finished
CMag

ขอบคุณสำหรับสิ่งนั้นเพื่อนของฉัน! โดยทั่วไปฉันสิ้นสุดต้อง sed แทนที่initctl emit cloud-init-finishedบริการ sysv เพื่อให้สามารถเชื่อมต่อ
Jose Alban

0

ผมขอแนะนำให้เริ่มต้นงานพุ่งพรวดของคุณหลังจากที่ทุกงานที่ไม่ธรรมดาเสร็จแล้ว:

start on started rc

/etc/init/rc.conf เป็นสิ่งที่เริ่มงานที่ไม่ใช่การพุ่งพรวดจากภายในเริ่มต้น

อุปกรณ์ประกอบฉาก: /server//a/533481


-1

วิธีการเกี่ยวกับการใช้

pre-start exec /etc/init.d/mysql start

ภายในงานพุ่งพรวดของคุณ!


... ที่จะไม่เริ่มงานพุ่งพรวดอย่างน่าอัศจรรย์เมื่อ mysql เริ่ม
adaptr

ใช่นั่นไม่ใช่สิ่งที่คุณถาม !!! คุณถามหาวิธีอื่น อย่างน้อยนั่นคือสิ่งที่ฉันเข้าใจ
kaji

งานพุ่งพรวดของฉันควรจะตรวจสอบ mysql และส่งการแจ้งเตือนถ้ามันไม่ทำงาน ฉันรู้สึก MySQL บิต unconfortable เปิดตัวผ่านงานการตรวจสอบ
Falken

ฉันไม่คิดว่าผิดทั้งหมด ฉันทำอะไรแบบนี้: สคริปต์ก่อนเริ่มถ้า! /etc/init.d/rabbitmq-server สถานะ &> / dev / null; จากนั้น /etc/init.d/rabbitmq-server สคริปต์เริ่มต้นสิ้นสุด fi
maxadamo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.