Systemctl 服务启动时超时

Systemctl 服务启动时超时

<我已创建*.service并将其放在我的/etc/systemd/system文件夹中:

[Unit]
Description=WSO2 IoT Message broker

[Service]
Environment="JAVA_HOME=/usr/lib/jvm/java-8-oracle"
Type=forking
ExecStart=/home/ubuntu/wso2iot-3.1.0/bin/broker.sh

[Install]
WantedBy=multi-user.target

我正在尝试运行 WSO2 IoT 服务器的一个程序,但这并不重要。

当我手动启动该bash脚本时,它会加载很长时间并保持启动模式,因为它运行类似 Web 服务器应用程序的东西,然后占用特定的端口。

当我像这样启动这项服务时:

sudo systemctl start myservice.service

它过了很久才说:Start operation timed out. Terminating.

我需要让这项服务永远启动,直到我手动停止它。

我的服务配置文件中遗漏了什么?

答案1

Type将服务脚本的设置为simpleoneshot。具体取决于启动的 shell 脚本的行为。

  • 如果 shell 脚本运行无限循环并且不退出,则设置Typesimple
  • 否则设置Typeoneshot

完成更改后,重新加载配置systemctl daemon-reload并启动服务。

答案2

我还必须补充一点(或者是因为我最后重新启动了,而 TimeoutSec 实际上并没有什么区别?)

TimeoutSec=0

正如所述https://bugzilla.redhat.com/show_bug.cgi?id=1446015#c7

man systemd.service我自己的系统上的命令告诉我应该infinity使用它。我想两者都可以。

就像这样(无论 GuessMainPID 是什么,但这是我当前工作文件的样子):

/etc/systemd/系统/[电子邮件保护]

[Service]
Type=simple
TimeoutSec=0
GuessMainPID=false
ExecStart=/bin/bash -c "funny stuff %I"

我的服务是由 udev 规则触发的(例如http://blog.fraggod.net/2012/06/16/proper-ish-way-to-start-long-running-systemd-service-on-udev-event-device-hotplug.html),不知道这是否有任何区别。对于任何想知道如何获取超时日志的人:我必须运行journalctl | tail才能查看我的 udev 规则和服务刚刚产生了哪些类型的错误。

相关内容