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