[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”?
如果使用类型“ forking”,则服务将“失败”,并且没有错误消息。
答案 0 :(得分:0)
您可以在此处找到Systemd的Simple,Forking和其他启动选项之间的区别:https://superuser.com/questions/1274901/systemd-forking-vs-simple/1274913
通常,如果启动脚本受阻,则必须使用simple;如果启动脚本在没有systemd的帮助下进行分叉,则必须使用分叉(使用npm start时可能就是这种情况)。
此外,您可能必须在服务描述符中添加“ RemainAfterExit = true”,以便systemd认为该服务仍在运行。您还需要定义一个ExecStop脚本,以便systemd知道如何停止服务。
您还可以参考本主题,了解如何为节点js定义系统启动脚本。