Centos

systemctl .service 文件未按預期工作

  • September 20, 2016

我正在使用 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。任何幫助,將不勝感激。

通常 systemd 可以將 init.d 腳本轉換為服務,而無需生成 .service 單元文件 - 如果腳本位於 init.d 目錄中,是可執行的並且可以由 systemd 成功解析,那麼(沒有 .service 文件)執行 systemctl status xymon 應該可以正常工作。顯然,情況並非總是如此。我在我的 centos 7 機器上擁有的唯一服務是 VMWare 工作站——在這種情況下,它只是在沒有服務文件的情況下工作。

這是使用 systemd 且不使用 init.d 腳本啟動 xymon 的推薦服務文件。一旦它工作(並且肯定在重新啟動之前),您可能必須將它們移出 init.d 區域。大概他們沒有在目前的狀態下工作,但他們仍然可以做足夠的干預。

這個站點有 el7 可用的 rpm(和 srpm):http://terabithia.org/rpms/xymon/它們 顯然是它的測試版,但它們包含 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

注意 - 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

引用自:https://unix.stackexchange.com/questions/285268