
Eu tenho um script que é usado para realizar verificações de integridade pré e pós de nossos servidores RedHat e o script está funcionando bem no RHEL 6. Além disso, configurei o script no nível de execução para que ele me envie um e-mail antes e depois da reinicialização. Agora quero que a mesma coisa seja configurada em minhas máquinas RHEL 7, mas o problema é que quando configurei o script no systemd ele executa apenas o relatório pós-reinicialização e não o status de pré-reinicialização. Além disso, quando executo o script manualmente em minhas máquinas rhel 7, ele funciona bem. Portanto, acredito que não há problema com meu script, deve haver alguma configuração que estou faltando ao configurar meu script personalizado para o systemd.
Aqui está meu exemplo de configuração do 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
Responder1
Eu simulei algo em uma VM CentOS 7 que parece estar funcionando. Meuscript personalizadoapenas ecoa para um arquivo ao iniciar, parar, reiniciar e status (/var/tmp/custom.out). Algumas pequenas diferenças. Na estrofe "[Unit]" você tem "After=network.service", eu tenho "After=network-online.target" e "After=remote-fs.target". Também adicionei "Wants=network-online.target". Outra diferença é que mudei "Type=forking" para "Type=simple" na sub-rotina "[Service]", pois estou assumindo que o script não é um dameon destinado a ser executado em segundo plano.
# 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
Para referência, meu arquivo /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
Aqui está /var/tmp/custom.out. Desliguei às 13h04, esperei alguns minutos e inicializei. Após mais 20 minutos executei outro desligamento, esperei um pouco mais de 2 minutos e inicializei novamente.
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
No entanto, estou me perguntando se o seu problema também pode ser o fato de o script não ter sido concluído no momento em que o sistema é desligado.