
升級到 16.04 後,我是 systemd 新手,在啟動和重新啟動服務時遇到問題。當我跑步(例如)...
systemctl start djalbat.com
……它似乎有效,但是我沒有收到提示,它似乎掛起。如果我ctrl-c
返回提示然後測試服務是否已啟動,它似乎已經啟動了。我想知道配置中有什麼會導致這種情況發生?這裡是:
[Unit]
Description=djalbat.com
[Service]
Type=forking
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log
[Install]
WantedBy=multi-user.target
另外,如果有人能指出最後一條WantedBy
指令的必要性,我們將不勝感激。
答案1
所以結果發現用設定執行的命令ExecStart
並沒有叉而該systemd
服務是為分叉可執行檔配置的。這導致systemctl
等待可執行檔的 for 導致不傳回命令列。
可執行檔的正確配置不叉就是使用Type=simple
.
[Unit]
Description=djalbat.com
[Service]
Type=simple
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log
[Install]
WantedBy=multi-user.target
需要WantedBy
將此單元與目標連接起來,因此當達到適當的目標時,該單元或服務將自動啟動,並啟用該服務以自動啟動
systemctl enable djalbat
systemd
對服務文件進行更改後,不要忘記刷新
systemctl daemon-reload