systemd - 我的自定义服务退出,状态码为 216/GROUP

med*_*nzo 4 linux webserver systemd daemon node.js

我为 Nodejs Express 服务器安装了以下单元文件:

 [Unit]
 Description=Server for SpeedBot
 After=network.target

 [Service]
 ExecStart=/var/www/SpeedBot/server.js
 Restart=always
 User=nobody
 Group=nobody
 Environment=PATH=/usr/bin:/usr/local/bin
 Environment=NODE_ENV=production
 WorkingDirectory=/home/pi/SpeedBot/server.js

 [Install]
 WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

当我运行它并做:service speedbotserver status我得到:

? speedbotserver.service - Server for SpeedBot
   Loaded: loaded (/etc/systemd/system/speedbotserver.service; disabled)
   Active: failed (Result: start-limit) since Thu 2017-06-29 01:31:18 UTC; 18h ago 
  Process: 19189 ExecStart=/var/www/SpeedBot/server.js (code=exited, status=216/GROUP)
 Main PID: 19189 (code=exited, status=216/GROUP)
Run Code Online (Sandbox Code Playgroud)

Jde*_*eBP 8

组=没人

当错误消息告诉您设置服务运行所在的组时出现问题(即该状态代码正在执行的操作)时,您的第一个想法应该是“我是否为此服务配置了有效的组?”

nobody顺便说一下,不要将服务作为 运行。这是一个坏主意,世界在 1990 年代学会了不要这样做。 nobody具有与 NFS 相关的特定用法,这意味着它是文件系统中(可能是许多)事物的(明显)所有者。它不适合运行守护进程,其用户帐户通常应该只拥有文件系统中与其操作直接相关的有限数量的东西。

作为特定于该服务的专用用户帐户运行您的服务。

进一步阅读


Sou*_*rav 1

您可以尝试使用以下单位配置:

 [Unit]
 Description=Server for SpeedBot
 After=network.target

 [Service]
  ExecStart=/bin/sh -c "exec /usr/bin/node /var/www/SpeedBot/server.js"
  Restart=always
  User=nobody
  Group=nobody
  Environment=PATH=/usr/bin:/usr/local/bin
  Environment=NODE_ENV=production
  WorkingDirectory=/var/www/SpeedBot

 [Install]
 WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)