升级到 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)
| 归档时间: |
|
| 查看次数: |
32435 次 |
| 最近记录: |