Bagaimana saya bisa memulai layanan systemd hanya setelah mysql telah dimulai?

14

Saya sedang mengerjakan proyek yang merupakan EmailServer mono. Saya telah mencoba menambahkan layanan ke systemd sehingga dijalankan secara otomatis saat boot tetapi saya mengalami masalah.

Saya telah membuat skrip dan ditambahkan ke /lib/systemd/system/emailserver.servicekemudian jalankan ln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service.

Saya kemudian dieksekusi systemd reload-daemondiikuti oleh systemctl start emailserver.servicedan kemudian ketika saya menjalankan ps -ef |grep -i emailserversaya kemudian dapat melihat bahwa mono EmailServer.exeitu berjalan, semua terlihat baik sejauh ini.

Namun, ketika saya me-reboot server dalam /var/log/messagesfile itu kemudian berisi pesan kesalahan berikut

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.

Dalam skrip emailserver.service saya, saya memiliki yang berikut ini

[Unit]
Description=Boardies Email Server Startup Script

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

[Install]
WantedBy=multi-user.target

Saya menggunakan OpenSuse 12.1

Apa yang saya lakukan salah, terima kasih atas bantuan yang dapat Anda berikan.

PEMBARUAN Saya telah menemukan apa yang menyebabkan program berhenti bekerja saat bootup tetapi saya tidak yakin bagaimana saya dapat memperbaiki masalah ini. Program saya bergantung pada database MySQL dan saya pikir program saya mulai sebelum MySQL dimulai, bagaimana saya bisa membuat layanan saya tidak memuat sampai setelah MySQL dimulai.

Boardy
sumber
Anda harus melihat beberapa contoh, misalnya: en.gentoo-wiki.com/wiki/Systemd atau wiki.archlinux.org/index.php/Systemd/Services
Ulrich Dangel

Jawaban:

29

Tambahkan After=mysql.serviceke file layanan Anda (atau ubah ke nama layanan yang benar), misalnya:

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

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

[Install]
WantedBy=multi-user.target

Harap dicatat bahwa Anda tidak harus memasukkan file layanan Anda ke / lib / systemd / system, ini adalah file yang disediakan pengguna dan Anda hanya perlu menyalinnya ke / etc / systemd / system.

Untuk mendapatkan daftar semua file layanan yang dapat Anda gunakan systemctl list-unit-filesdan tentukan nama yang benar untuk layanan basis data Anda (mungkin mysql.service atau mysqld.service)

Ulrich Dangel
sumber
dapatkah kita After=*.servicememesan lebih dari satu?
Ciasto piekarz