【问题标题】:systemd service is inactive(dead)systemd 服务处于非活动状态(已死)
【发布时间】:2019-07-16 08:27:56
【问题描述】:
[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

它是一个节点应用程序。

当我运行“npm start”时,它会被执行并运行四个不同的进程。 但是,当我运行“systemctl start learninglocker.service”时,它运行了几秒钟[即活动(运行)]并且失败并且四个进程再次运行。

我的问题是: 我可以使用 Type = Simple 还是应该使用“forking”?

如果使用“分叉”类型,服务将“失败”且没有错误消息。

【问题讨论】:

    标签: node.js linux systemd amazon-linux learning-locker


    【解决方案1】:

    您可以在这篇文章中找到 Simple、Forking 和其他 Systemd 启动选项之间的区别:https://superuser.com/questions/1274901/systemd-forking-vs-simple/1274913

    通常,如果您的启动脚本被阻塞,您必须使用 simple,如果您的启动脚本在没有 systemd 帮助的情况下分叉自己,则必须使用分叉(这可能是您使用 npm start 的情况)。

    此外,您可能必须在服务描述符中添加“RemainAfterExit=true”,以便 systemd 认为该服务仍在运行。您还需要定义一个 ExecStop 脚本,以便 systemd 知道如何停止您的服务。

    关于如何为 node js 定义 systemd 启动脚本也可以参考这个主题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 2022-12-18
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多