升级到 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
等待可执行文件的执行,从而导致不返回命令行。
正确的可执行文件配置如下:叉就是使用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