Centos systemd服务启动问题

Centos systemd服务启动问题,centos,systemd,Centos,Systemd,这是我第一次使用systemd,对某些东西有点不确定 我已经设置了一个服务(用于在tomcat下运行的geoserver): 启动脚本执行exec来运行java/tomcat。从命令行启动服务似乎可行: sudo systemctl start geoserver 但是,在我使用ctrl-c之前,该命令不会返回,我觉得这不合适。不过,java进程之后仍在运行,功能正常。我不愿意重新启动机箱来测试这一点,以防这会在初始化过程中导致问题,而且它是一台远程计算机,让人来解决这一问题会很痛苦。您需要

这是我第一次使用systemd,对某些东西有点不确定

我已经设置了一个服务(用于在tomcat下运行的geoserver):

启动脚本执行exec来运行java/tomcat。从命令行启动服务似乎可行:

 sudo systemctl start geoserver
但是,在我使用ctrl-c之前,该命令不会返回,我觉得这不合适。不过,java进程之后仍在运行,功能正常。我不愿意重新启动机箱来测试这一点,以防这会在初始化过程中导致问题,而且它是一台远程计算机,让人来解决这一问题会很痛苦。

您需要在“服务”部分设置正确的“类型”:

类型

配置此服务单元的进程启动类型。简单、分叉、一次性、dbus、通知或空闲

如果设置为simple(如果Type=或BusName=都不是,但是 ExecStart=已指定),预期该进程已配置 with ExecStart=是服务的主进程。在此模式下,如果 该流程为系统上的其他流程提供功能,其 应在安装守护进程之前安装通信通道 启动(例如,systemd通过插座激活设置插座),如 systemd将立即启动后续装置

如果设置为forking,则预期流程配置为 ExecStart=将调用fork()作为其启动的一部分。父母 当启动完成且所有操作完成时,预计流程将退出 建立了沟通渠道。这孩子继续跑来跑去 主守护进程。这是传统UNIX守护进程的行为。 如果使用此设置,建议也使用PIDFile= 选项,以便systemd可以识别守护进程的主进程。 systemd将在收到通知后立即启动后续装置 父进程退出

oneshot的行为类似于simple;然而,预计 在systemd启动后续装置之前,必须退出该过程。 RemainAfterExit=对于这种类型的服务特别有用。这 如果未指定Type=或ExecStart=,则为默认值

dbus的行为类似于simple;然而,预计 守护进程在D-Bus总线上获取一个名称,由 总线名=。systemd将在试验结束后继续启动后续装置 已获取D-Bus总线名称。具有此选项的服务单元 在dbus.socket单元上隐式配置增益依赖项。这 如果指定了BusName=,则类型为默认值

notify的行为类似于simple;然而,预计 守护进程通过sd_notify(3)或 完成启动后的等效调用。systemd将继续进行 在收到此通知消息后启动后续装置 发送。如果使用此选项,则应设置NotifyAccess=(见下文) 打开对systemd提供的通知套接字的访问。如果 NotifyAccess=未设置,它将隐式设置为main。注意 当前类型=notify如果与组合使用将不起作用 PrivateNetwork=是

空闲行为与简单行为非常相似;然而,实际执行 服务二进制文件的调度将延迟,直到所有作业都被调度。这 可用于避免shell服务的输出与 控制台上的状态输出


非常感谢你的努力。我想我已经试过了(和许多其他排列),也许我忘了重新加载。
 sudo systemctl start geoserver
[Service]
...
Type=simple
...