start on emit no funciona en advenedizo

start on emit no funciona en advenedizo

Estoy trabajando para reiniciar el servicio si se detiene.

estaba buscandoupstart, para reiniciar el servicio. Encontré algunosrespuestas.

Tomé apache2el servicio para realizar pruebas. Cambié el código como se muestra a continuación.

# File : /etc/init.d/apache2
...
...
#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred

        # either "stop" or "graceful-stop"
        local STOP=$1
        # can't use pidofproc from LSB here
        local AP_RET=0

        # send stopping apache event
        echo "Stopping....."
        initctl emit stopping-apache2

        if pidof $DAEMON > /dev/null 2>&1 ; then
                if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
                        AP_RET=2
                else
                        AP_RET=1
                fi
        else
            AP_RET=0
        fi

        # AP_RET is:
        # 0 if Apache (whichever) is not running
        # 1 if Apache (whichever) is running
        # 2 if Apache from the PIDFILE is running

        if [ $AP_RET = 0 ] ; then
                # send stopping apache event
                echo "Stopped.....1"
                initctl emit stopped-apache2

                return 1
        fi

        if [ $AP_RET = 2 ] && apache_conftest ; then
                $APACHE2CTL $STOP > /dev/null 2>&1
                apache_wait_stop $?
                # send stopping apache event
                echo "Stopped.....2"
                initctl emit stopped-apache2
                return $?
        else
                if [ $AP_RET = 2 ]; then
                                        clear_error_msg
                        APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest failed, so we are trying to kill it manually. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!"
                        killproc -p $PIDFILE $DAEMON
                        apache_wait_stop $?
                        # send stopping apache event
                        echo "Stopped.....3"
                        initctl emit stopped-apache2
                        return $?
                elif [ $AP_RET = 1 ] ; then
                        APACHE2_INIT_MESSAGE="There are processes named 'apache2' running which do not match your pid file which are left untouched in the name of safety, Please review the situation by hand".
                        # send stopping apache event
                        echo "Stopped.....4"
                        initctl emit stopped-apache2
                        return 2
                fi
        fi

}
...
...

Nota: emitir mensaje usandoinitctl emit stopped-apache2

Luego se cambió apache2.confpara realizar la operación de inicio en este evento.

# File /etc/init/apache2.conf
# apache2
# the purpose of this job is
# * start apache2 in upstart rather than SysV startup

start on stopped-apache2
stop on runlevel [016]


pre-start script
export RUNLEVEL=2
[ -f /var/lib/apache2.enable ] && /etc/init.d/apache2 start
end script

post-stop exec /etc/init.d/apache2 stop

Cuando detuve Apache recibí un mensaje.

root@localhost:~# /etc/init.d/apache2 stop
[....] Stopping web server: apache2Stopping.....
Stopped.....2
. ok

Pero parece que no se está ejecutando start on stopped-apache2.

También reinicio el trabajo usando initctl restart apache2.

¿Me perdí algo?

Respuesta1

Puede utilizar la respawnfunción Upstart. Utilice el trabajo inicial para Apache que se encuentra aquí:https://bitbucket.org/CameronNemo/upstart-jobs/src/2090612200fa588412e3fe22aec5ba3747ae88d2/apache2.conf?at=master

luego simplemente agregue una línea que diga respawn.

información relacionada