
Ich habe ein Skript, das zur Durchführung von Integritätsprüfungen unserer RedHat-Server vor und nach dem Neustart verwendet wird, und das Skript funktioniert unter RHEL 6 einwandfrei. Außerdem habe ich das Skript im Runlevel so konfiguriert, dass es mir vor und nach dem Neustart eine E-Mail sendet. Jetzt möchte ich, dass dasselbe auf meinen RHEL 7-Rechnern konfiguriert wird, aber das Problem ist, dass, wenn ich das Skript in systemd konfiguriere, es nur den Bericht nach dem Neustart ausführt und nicht den Status vor dem Neustart. Auch wenn ich das Skript manuell auf meinen RHEL 7-Rechnern ausführe, funktioniert es einwandfrei. Ich glaube also, dass es kein Problem mit meinem Skript gibt, es muss eine Konfiguration geben, die ich beim Einrichten meines benutzerdefinierten Skripts für systemd übersehen habe.
Hier ist meine Beispiel-Systemd-Konfiguration:
# 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
Antwort1
Ich habe auf einer CentOS 7 VM etwas nachgebaut, das zu funktionieren scheint. Meinebenutzerdefiniertes Skriptgibt lediglich beim Start, Stopp, Neustart und Status (/var/tmp/custom.out) eine Echo-Datei in eine Datei aus. Ein paar kleine Unterschiede. In der Strophe „[Unit]“ haben Sie „After=network.service“, ich habe „After=network-online.target“ und „After=remote-fs.target“. Ich habe auch „Wants=network-online.target“ hinzugefügt. Ein weiterer Unterschied ist, dass ich in der Strophe „[Service]“ „Type=forking“ in „Type=simple“ geändert habe, da ich davon ausgehe, dass das Skript kein Dämon ist, der im Hintergrund ausgeführt werden soll.
# 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
Als Referenz lautet meine Datei /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
Hier ist /var/tmp/custom.out. Ich habe um 13:04 heruntergefahren, ein paar Minuten gewartet und gebootet. Nach weiteren 20 Minuten habe ich ein weiteres Herunterfahren ausgeführt, etwas mehr als weitere 2 Minuten gewartet und erneut gebootet.
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
Ich frage mich jedoch, ob Ihr Problem auch darin bestehen könnte, dass das Skript zum Zeitpunkt des Herunterfahrens des Systems noch nicht abgeschlossen war?