
Tengo una secuencia de comandos que se utiliza para realizar comprobaciones de estado previas y posteriores a nuestros servidores RedHat y la secuencia de comandos funciona bien en RHEL 6. Además, configuré la secuencia de comandos en el nivel de ejecución para que me envíe un correo electrónico antes y después del reinicio. Ahora quiero configurar lo mismo en mis máquinas RHEL 7, pero el problema es que cuando configuré el script en systemd ejecuta solo el informe posterior al reinicio y no el estado previo al reinicio. Además, cuando ejecuto el script manualmente en mis máquinas rhel 7, funciona bien. Así que creo que no hay ningún problema con mi secuencia de comandos, debe haber alguna configuración que me falta al configurar mi secuencia de comandos personalizada en systemd.
Aquí está mi configuración de systemd de muestra:
# 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
Respuesta1
Me burlé de algo en una máquina virtual CentOS 7 que parece estar funcionando. Miscript personalizadosimplemente hace eco en un archivo al iniciar, detener, reiniciar y estado (/var/tmp/custom.out). Algunas diferencias menores. En la estrofa "[Unidad]" tienes "After=network.service", yo tengo "After=network-online.target" y "After=remote-fs.target". También agregué "Wants=network-online.target". Otra diferencia es que cambié "Type=forking" a "Type=simple" en la estrofa "[Service]" ya que supongo que el script no es un demonio destinado a ejecutarse en 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
Como referencia, mi archivo /etc/rc.d/init.d/customscript es:
#!/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
Aquí está /var/tmp/custom.out. Apagué a las 13:04, esperé unos minutos y arranqué. Después de otros 20 minutos, ejecuté otro apagado, esperé un poco más de otros 2 minutos y reinicié.
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
Sin embargo, me pregunto si su problema también podría ser que el script no se haya completado cuando se apaga el sistema.