
私はモノラルの EmailServer プロジェクトに取り組んでいます。起動時に自動的に起動するように systemd にサービスを追加しようとしましたが、問題が発生しています。
スクリプトを作成し、 に追加し/lib/systemd/system/emailserver.service
て実行しましたln -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.
私の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 のいずれかです)。