我正在尝试使用 systemd 在系统启动时自动运行以下命令。
/usr/bin/node /var/www/html/rest-api/dist/index.js
我已经通过手动运行验证了该命令是否有效,但是当我尝试使用文件启动它时,rest.service
出现了错误。
休息服务:
[Unit]
Description=REST API
After=network.target
[Service]
ExecStart=/usr/bin/node /var/www/html/rest-api/dist/index.js
Restart=always
User=nobody
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/rest-api/dist
[Install]
WantedBy=multi-user.target
journalctl -u rest-api
输出:
其中rest.service
用户和组 = nobody:
Oct 06 02:10:28 ip-172-31-26-208 systemd[7172]: rest-api.service: Failed at step GROUP spawning /usr/bin/node: No such process
Oct 06 02:10:28 ip-172-31-26-208 systemd[1]: rest-api.service: Main process exited, code=exited, status=216/GROUP
Oct 06 02:10:28 ip-172-31-26-208 systemd[1]: rest-api.service: Unit entered failed state.
Oct 06 02:10:28 ip-172-31-26-208 systemd[1]: rest-api.service: Failed with result 'exit-code'.
Oct 06 02:10:29 ip-172-31-26-208 systemd[1]: rest-api.service: Service hold-off time over, scheduling restart.
Oct 06 02:10:29 ip-172-31-26-208 systemd[1]: Stopped REST API.
其中rest.service
用户和组 = root:
Oct 06 02:20:11 ip-172-31-26-208 systemd[1]: Started REST API.
Oct 06 02:20:11 ip-172-31-26-208 systemd[1]: rest-api.service: Main process exited, code=exited, status=200/CHDIR
Oct 06 02:20:11 ip-172-31-26-208 systemd[1]: rest-api.service: Unit entered failed state.
Oct 06 02:20:11 ip-172-31-26-208 systemd[1]: rest-api.service: Failed with result 'exit-code'.
Oct 06 02:20:12 ip-172-31-26-208 systemd[1]: rest-api.service: Service hold-off > time over, scheduling restart.
Oct 06 02:20:12 ip-172-31-26-208 systemd[1]: Stopped REST API.
有什么想法可以解决吗?
答案1
code=exited, status=200/CHDIR
是您的关键错误信息。
它表示/var/www/rest-api/dist
在您的服务尝试运行时不存在或无法访问。
如果是通过网络安装的,After=network.target
并不一定意味着任何给定的网络安装都已安装。甚至可能启动缓慢的本地驱动器尚未安装。要查看您是否遇到竞争条件,请尝试添加延迟或可能使用RequiresMountsFor=
,甚至ConditionPathExists=
。
来源:https://www.freedesktop.org/software/systemd/man/systemd.unit.html
答案2
我遇到了类似的问题,我所有文件夹都正确存在,但出现相同的错误。我通过更改“用户”参数使其正常工作。我将其设置为 root 并成功了。仅供参考。