Linux
用於 sysv init 到 systemd 轉換的自定義腳本
我有一個腳本,用於執行我們的 RedHat 伺服器的前後執行狀況檢查,並且該腳本在 RHEL 6 上執行良好。此外,我已經在執行級別配置了腳本,以便它在重新啟動之前和之後向我發送一封電子郵件。現在我想在我的 RHEL 7 機器上配置相同的東西,但問題是當我在 systemd 中配置腳本時,它只執行重啟後報告,而不是重啟前狀態。此外,當我在我的 rhel 7 機器上手動執行腳本時,它工作正常。所以我相信我的腳本沒有問題,在將我的自定義腳本設置為 systemd 時,一定有一些我缺少的配置。
這是我的範例 systemd 配置:
# Automatically generated by systemd-sysv-generator [Unit] Documentation=man:systemd-sysv-generator(8) SourcePath=/etc/rc.d/init.d/customscript Description=SYSV: Server Reboot Before=shutdown.target After=network.service Conflicts=shutdown.target [Service] Type=forking Restart=no TimeoutSec=5min IgnoreSIGPIPE=no KillMode=process GuessMainPID=no RemainAfterExit=yes ExecStart=/etc/rc.d/init.d/customscript start ExecStop=/etc/rc.d/init.d/customscript stop [Install] WantedBy=multi-user.target
我在似乎可以工作的 CentOS 7 VM 上模擬了一些東西。我的自定義腳本僅在啟動、停止、重新啟動和狀態 (/var/tmp/custom.out) 時回顯到文件。一些細微的差別。在裡面 ”
$$ Unit $$“ 節你有“After=network.service”,我有“After=network-online.target”和“After=remote-fs.target”。我還添加了“Wants=network-online.target”。另一個區別是我在“$$ Service $$" 節,因為我假設腳本不是要在後台執行的 dameon。
# Automatically generated by systemd-sysv-generator [Unit] Documentation=man:systemd-sysv-generator(8) SourcePath=/etc/rc.d/init.d/customscript Description=LSB: Start daemon at boot time Before=shutdown.target After=remote-fs.target After=network-online.target After=postfix.service Wants=network-online.target [Service] Type=oneshot Restart=no TimeoutSec=5min IgnoreSIGPIPE=no KillMode=process GuessMainPID=no RemainAfterExit=yes ExecStart=/etc/rc.d/init.d/customscript start ExecStop=/etc/rc.d/init.d/customscript stop [Install] WantedBy=multi-user.target
作為參考,我的 /etc/rc.d/init.d/customscript 文件是:
#!/bin/bash ### BEGIN INIT INFO # Provides: customscript # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO # Using the lsb functions to perform the operations. . /lib/lsb/init-functions case $1 in start) echo "Custom Start at $(date)" >> /var/tmp/custom.out ;; stop) echo "Custom Stop at $(date)" >> /var/tmp/custom.out ;; restart) echo "Custom Restart at $(date)" >> /var/tmp/custom.out ;; status) echo "Custom Status at $(date)" >> /var/tmp/custom.out ;; *) echo "Custom other at $(date)" >> /var/tmp/custom.out ;; esac
這是/var/tmp/custom.out。我在 13:04 關機,等了幾分鐘就開機了。再過 20 分鐘後又執行了一次關機,又等了 2 分鐘多一點,然後再次啟動。
Custom Stop at Thu Jun 1 13:04:37 PDT 2017 Custom Start at Thu Jun 1 13:10:39 PDT 2017 Custom Stop at Thu Jun 1 13:30:07 PDT 2017 Custom Start at Thu Jun 1 13:32:45 PDT 2017
但是,我想知道您的問題是否也可能是系統關閉時腳本尚未完成?