systemctl .service 文件未按预期工作

systemctl .service 文件未按预期工作

我正在 Centos 7 中使用服务文件,并为 xymon 创建一个。我遇到的问题是我正在尝试配置启动、停止和重新启动。我尽可能使用现有的服务文件作为模板,但无论我选择哪个选项,都会使用“停止”选项。

# more xymon.service
[Unit]
Description=Xymon Monitor Service
After=network.target
[Service]
Type=simple
#User=xymon
ExecStart=/home/xymon/startup/xymon-init.d start
ExecReload=/home/xymon/startup/xymon-init.d restart
ExecStop=/home/xymon/startup/xymon-init.d stop
[Install]
WantedBy=multi-user.target

我尝试了简单的、分叉的和其他几个变体,但都无济于事。我放置了一个虚拟脚本,其中打印了第一个参数,并且我总是在日志文件中停止。我过去曾做过其他类型的服务文件,没有出现任何问题,但这是我第一次尝试这个 systemctl。任何帮助,将不胜感激。

答案1

注意 - Argonauts 的答案适用于某些模组。这是我的环境中基于标准安装的工作版本:

# xymonlaunch.service
# systemd file for Fedora 18 and up, or RHEL 7 and up

[Unit]
Description=Xymon systems and network monitor
Documentation=man:xymon(7) man:xymonlaunch(8) man:xymon(1)
After=network.target

[Install]
# Compatibility with "xymon" and "xymon-client"
Alias=xymon.service
Alias=xymon-client.service
WantedBy=multi-user.target


[Service]
#EnvironmentFile=/etc/sysconfig/xymonlaunch
User=xymon
# We wrap in xymoncmd to eliminate the need for the bulk of the old init script
ExecStart=/home/xymon/server/bin/xymoncmd /home/xymon/server/bin/xymonlaunch --no-daemon $XYMONLAUNCHOPTS
Type=simple

# Kill xymonlaunch, but don't send kills to the underlying procs, since they
# might be doing important things (like writing checkpoints and flushing caches)
KillMode=process
# SendSIGHUP=yes
SendSIGKILL=no

答案2

通常 systemd 可以将 init.d 脚本转换为服务,而无需生成 .service 单元文件 - 如果脚本位于 init.d 目录中,可执行并且可以被 systemd 成功解析,那么(没有 .service 文件)运行 systemctl status xymon 应该可以工作。显然,情况并非总是如此。我的 centos 7 机器上唯一拥有的服务是 VMWare 工作站 - 在这种情况下,它无需服务文件即可工作。

以下是使用 systemd 启动 xymon 且不使用 init.d 脚本的推荐服务文件。一旦工作正常(并且肯定是在重新启动之前),您可能必须将它们移出 init.d 区域。据推测,他们目前的状态并没有工作,但他们仍然可以做足够的干扰。

此站点提供了适用于 el7 的 rpm(和 srpm):http://terabithia.org/rpms/xymon/ 它们显然是它的 Beta 版本,但它们包含 systemd 配置,这些配置不在官方 sourceforge 下载中。

# xymonlaunch.service
# systemd file for Fedora 18 and up, or RHEL 7 and up

[Unit]
Description=Xymon systems and network monitor
Documentation=man:xymon(7) man:xymonlaunch(8) man:xymon(1)
After=network.target

[Install]
# Compatibility with "xymon" and "xymon-client"
Alias=xymon.service
Alias=xymon-client.service
WantedBy=multi-user.target


[Service]
EnvironmentFile=/etc/sysconfig/xymonlaunch
User=xymon
# We wrap in xymoncmd to eliminate the need for the bulk of the old init script
ExecStart=/usr/bin/xymoncmd /usr/sbin/xymonlaunch --no-daemon $XYMONLAUNCHOPTS
Type=simple

# Kill xymonlaunch, but don't send kills to the underlying procs, since they
# might be doing important things (like writing checkpoints and flushing caches)
KillMode=process
# SendSIGHUP=yes
SendSIGKILL=no

相关内容