ฉันจะเริ่มบริการ systemd ได้หลังจาก mysql เริ่มทำงานแล้วเท่านั้น?


15

ฉันกำลังทำงานในโครงการที่เป็น EmailServer แบบโมโน ฉันได้ลองเพิ่มบริการไปยัง systemd เพื่อให้มันเริ่มขึ้นโดยอัตโนมัติในระหว่างการบูต แต่ฉันมีปัญหา

ผมได้สร้างสคริปต์และเพิ่มไปแล้วเรียกใช้/lib/systemd/system/emailserver.serviceln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service

ฉันได้ดำเนินการแล้วsystemd reload-daemonตามด้วยsystemctl start emailserver.serviceและเมื่อฉันเรียกใช้ps -ef |grep -i emailserverแล้วฉันจะเห็นว่าmono EmailServer.exeกำลังทำงานอยู่ทั้งหมดดูดีจนถึงขณะนี้

อย่างไรก็ตามเมื่อฉันรีบูทเซิร์ฟเวอร์ใน/var/log/messagesไฟล์มันจะมีข้อความแสดงข้อผิดพลาดดังต่อไปนี้

Jul 16 19:41:02 dev-server systemd[1]: emailserver.service holdoff
time over, scheduling restart. Jul 16 19:41:02 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:03 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:04 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:04 dev-server systemd[1]: emailserver.service start request
repeated too quickly, refusing to start.

ใน scriptserver.service ของฉันฉันมีดังต่อไปนี้

[Unit]
Description=Boardies Email Server Startup Script

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

ฉันใช้ OpenSuse 12.1

ฉันทำอะไรผิดขอบคุณสำหรับความช่วยเหลือที่คุณสามารถให้ได้

อัปเดต ฉันพบว่าสาเหตุใดที่ทำให้โปรแกรมหยุดทำงานเมื่อบู๊ตเครื่อง แต่ฉันไม่แน่ใจว่าจะแก้ไขปัญหานี้ได้อย่างไร โปรแกรมของฉันขึ้นอยู่กับฐานข้อมูล MySQL และฉันคิดว่าโปรแกรมของฉันเริ่มต้นก่อนที่ MySQL จะเริ่มต้นฉันจะทำให้บริการของฉันไม่โหลดจนกว่าจะเริ่ม MySQL ได้อย่างไร


คุณควรดูตัวอย่างบางส่วนเช่น: en.gentoo-wiki.com/wiki/Systemdหรือwiki.archlinux.org/index.php/Systemd/Services
Ulrich Dangel

คำตอบ:


30

เพิ่มAfter=mysql.serviceไปยังไฟล์บริการของคุณ (หรือเปลี่ยนเป็นชื่อบริการที่ถูกต้อง) เช่น:

[Unit]
Description=Boardies Email Server Startup Script
After=mysql.service

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

โปรดทราบว่าคุณไม่จำเป็นต้องใส่ไฟล์บริการของคุณลงใน / lib / systemd / system มันเป็นไฟล์ที่ผู้ใช้ให้และคุณควรคัดลอกไปยัง / etc / systemd / system

ในการรับรายการไฟล์บริการทั้งหมดคุณสามารถใช้systemctl list-unit-filesและกำหนดชื่อที่ถูกต้องสำหรับบริการฐานข้อมูลของคุณ (อาจเป็น mysql.service หรือ mysqld.service)


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