script personalizado para conversão de sysv init para systemd

0

Eu tenho um script que é usado para realizar pré e pós-verificação de integridade de nossos servidores RedHat e o script está funcionando bem no RHEL 6. Além disso, eu configurei o script em runlevel para que ele me envie um e-mail antes e após a reinicialização. Agora quero que a mesma coisa seja configurada em minhas máquinas RHEL 7, mas o problema é que quando eu configurei o script no systemd, ele executa apenas o relatório de pós-reinicialização e não o status de pré-reinicialização. Além disso, quando eu executo o script manualmente em minhas máquinas rhel 7, ele funciona bem. Então eu acredito que não há problema com o meu script, deve haver alguma configuração que eu estou ausente ao configurar meu script personalizado para systemd.

Aqui está o meu exemplo systemd config:

# 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
    
por vinu 01.06.2017 / 16:45

1 resposta

1

Eu zombei de algo em uma VM do CentOS 7 que parece estar funcionando. Meu alfanumérico simplesmente ecoa para um arquivo no início, parada, reinício e status (/var/tmp/custom.out). Algumas pequenas diferenças. Na sub-rotina "[Unit]" você tem "After = network.service", eu tenho "After = network-online.target" e "After = remote-fs.target". Eu também adicionei "Wants = network-online.target". Outra diferença é que mudei "Type = forking" para "Type = simple" na estrofe "[Service]" já que estou assumindo que o script não é um dameon para 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. Eu desliguei às 13:04, esperei alguns minutos e inicializei. Após outros 20 minutos, executamos outro desligamento, esperamos um pouco mais do que outros 2 minutos e iniciamos 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 pensando se o seu problema também pode ser que o script não tenha sido concluído no momento em que o sistema é desligado?

    
por 01.06.2017 / 22:52