![當我啟動或重新啟動服務時 systemd 掛起](https://rvso.com/image/898924/%E7%95%B6%E6%88%91%E5%95%9F%E5%8B%95%E6%88%96%E9%87%8D%E6%96%B0%E5%95%9F%E5%8B%95%E6%9C%8D%E5%8B%99%E6%99%82%20systemd%20%E6%8E%9B%E8%B5%B7.png)
升級到 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