如何在mysql啟動後才啟動systemd服務?

如何在mysql啟動後才啟動systemd服務?

我正在開發一個單一電子郵件伺服器專案。我嘗試為 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)

相關內容