当我启动或重新启动服务时 systemd 挂起

Jam*_*ith 20 systemd

升级到 16.04 后,我是 systemd 的新手,但在启动和重新启动服务时遇到问题。当我跑步时(例如)...

systemctl start djalbat.com
Run Code Online (Sandbox Code Playgroud)

...它似乎工作,但是我没有得到提示,它似乎挂起。如果我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
Run Code Online (Sandbox Code Playgroud)

此外,如果有人可以指出最后一条WantedBy指令的必要性,那将不胜感激。

Tho*_*mas 18

所以事实证明,使用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
Run Code Online (Sandbox Code Playgroud)

WantedBy需要本机与目标连接,所以本机或服务会自动启动时达到适当的目标时,并已启用该服务以自动启动

systemctl enable djalbat
Run Code Online (Sandbox Code Playgroud)

systemd更改服务文件后不要忘记刷新

systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)