mysql が起動した後にのみ systemd サービスを起動するにはどうすればよいですか?

mysql が起動した後にのみ systemd サービスを起動するにはどうすればよいですか?

私はモノラルの EmailServer プロジェクトに取り組んでいます。起動時に自動的に起動するように systemd にサービスを追加しようとしましたが、問題が発生しています。

スクリプトを作成し、 に追加し/lib/systemd/system/emailserver.serviceて実行しましたln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service

その後、 を実行しsystemd reload-daemonsystemctl 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.

私のemailserver.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 が起動するまでサービスが読み込まれないようにするにはどうすればよいでしょうか。

答え1

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 のいずれかです)。

関連情報