sysv initからsystemdへの変換のためのカスタムスクリプト

sysv initからsystemdへの変換のためのカスタムスクリプト

RedHat サーバーで事前および事後状態チェックを実行するスクリプトがあり、RHEL 6 で正常に動作します。また、再起動の前後に電子メールを送信するように実行レベルでスクリプトを設定しました。 RHEL 7システムでも同じように設定したいのですが、systemdでスクリプトを設定するときの問題は、再起動前の状態ではなく再起動後のレポートのみを実行することです。また、rhel 7システムでスクリプトを手動で実行すると正常に動作します。だから私のスクリプトには問題がないと思います。カスタムスクリプトを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

ベストアンサー1

動作しているように見えるCentOS 7仮想マシンで何かをシミュレートしました。私のものカスタムスクリプト起動、停止、再起動、および状態でのみファイル(/var/tmp/custom.out)にエコーされます。少し微妙な違いがあります。 「[Unit]」セクションには「After=network.service」があり、「After=network-online.target」と「After=remote-fs.target」があります。 「Wants=network-online.target」も追加しました。もう1つの違いは、スクリプトがバックグラウンドで実行されているデーモンではないと仮定し、[[Service]]セクションの[Type = forking]を[Type = simple]に変更したことです。

# 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

しかし、システムがシャットダウンしたときにスクリプトがまだ完了していないのが問題かもしれません。

おすすめ記事