systemd服务未启动

4
[Service]
Type = forking
PIDFile = /var/run/learninglocker.pid
ExecStart = /usr/bin/npm  start
WorkingDirectory = /opt/learninglocker
User = root
Group = root
EnvironmentFile = /opt/learninglocker/environment
StandardOutput = syslog
StandardError = syslog
SyslogIdentifier = learninglocker
LimitCORE = infinity
LimitNOFILE = infinity
LimitNPROC = infinity
TimeoutStartSec = "2min 30s"

[Unit]
After = network.target

[Install]
WantedBy = multi-user.target

这是一个Node应用程序。

当我运行“npm start”时,它会执行并运行四个不同的进程。 但是,当我运行“systemctl start learninglocker.service”时,它会运行几秒钟(即活动状态(正在运行)),然后失败,四个进程再次在后台运行。

我的问题是: 如果我使用“Simple”类型,是否可以?或者我应该使用“forking”?

如果使用“forking”类型,则服务将在没有错误消息的情况下“失败”。

1个回答

1
您可以在本文中找到Systemd的Simple、Forking和其他启动选项之间的区别:https://superuser.com/questions/1274901/systemd-forking-vs-simple/1274913 通常情况下,如果您的启动脚本是阻塞的,您需要使用simple,如果您的启动脚本没有systemd的帮助而自行分叉,则需要使用forking(这可能是您使用npm start的情况)。
此外,您可能还需要在服务描述符中添加“RemainAfterExit=true”,以便systemd认为该服务仍在运行。您还需要定义一个ExecStop脚本,以便systemd知道如何停止您的服务。
您也可以参考本主题,了解如何为node js定义systemd启动脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接