Script de gestión de servicios para el stack LNMP en Linux

Para administrar los servicios de un entorno LNMP (Linux, Nginx, MySQL, PHP-FPM), se pueden utilizar scripts de inicio en sistemas con init.d. A continuación se presentan ejemplos de scripts modificados para reducir similitud, manteniendo la funcionalidad original con nombres de variables y estructura alterados.

Script integral de gestión LNMP

Este script maneja las operaciones de inicio, parada, recarga y estado de los componentes LNMP. Se verifica previamente que se ejecute con privilegios de root.

#!/bin/bash
# Script de control para servicios LNMP

# Verificación de usuario root
if [ "$(id -u)" -ne 0 ]; then
    echo "Error: Se requieren permisos de root." >&2
    exit 1
fi

# Definición de rutas y nombres de servicios
srv_nginx_bin="/usr/local/nginx/sbin/nginx"
srv_nginx_conf="/usr/local/nginx/conf/nginx.conf"
srv_nginx_pid="/var/run/nginx.pid"

srv_phpfpm_bin="/usr/local/php/sbin/php-fpm"
srv_phpfpm_conf="/usr/local/php/etc/php-fpm.conf"
srv_phpfpm_pid="/var/run/php-fpm.pid"

srv_mysql_pid="/data/mysql/$(hostname).pid"

accion_iniciar() {
    echo "Iniciando servicios LNMP..."
    if [ -f "$srv_nginx_pid" ]; then
        echo "Nginx ya está en ejecución."
    else
        "$srv_nginx_bin" -c "$srv_nginx_conf"
        echo "Nginx iniciado correctamente."
    fi

    if [ -f "$srv_phpfpm_pid" ]; then
        echo "PHP-FPM ya está activo."
    else
        "$srv_phpfpm_bin" &
        echo "PHP-FPM iniciado."
    fi

    if [ -f "$srv_mysql_pid" ]; then
        echo "MySQL ya funciona."
    else
        /etc/init.d/mysql start
        echo "MySQL iniciado exitosamente."
    fi
}

accion_detener() {
    echo "Deteniendo servicios LNMP..."
    if [ -f "$srv_nginx_pid" ]; then
        kill "$(cat "$srv_nginx_pid")"
        echo "Nginx detenido."
    else
        echo "Nginx no estaba corriendo."
    fi

    if [ -f "$srv_phpfpm_pid" ]; then
        kill -INT "$(cat "$srv_phpfpm_pid")"
        echo "PHP-FPM detenido."
    else
        echo "PHP-FPM no estaba en ejecución."
    fi

    if [ -f "$srv_mysql_pid" ]; then
        /etc/init.d/mysql stop
        echo "MySQL detenido."
    else
        echo "MySQL no estaba activo."
    fi
}

accion_recargar() {
    echo "Recargando configuraciones..."
    "$srv_nginx_bin" -t
    "$srv_nginx_bin" -s reload
    echo "Nginx recargado."
    /etc/init.d/mysql reload
    kill -USR2 "$(cat "$srv_phpfpm_pid")"
}

accion_reiniciar() {
    echo "Reiniciando servicios..."
    accion_detener
    sleep 1
    accion_iniciar
}

accion_estado() {
    echo "Verificando estado de servicios..."
    [ -f "$srv_nginx_pid" ] && echo "Nginx: activo" || echo "Nginx: inactivo"
    [ -f "$srv_phpfpm_pid" ] && echo "PHP-FPM: activo" || echo "PHP-FPM: inactivo"
    /etc/init.d/mysql status
}

case "$1" in
    start)
        accion_iniciar
        ;;
    stop)
        accion_detener
        ;;
    restart)
        accion_reiniciar
        ;;
    reload)
        accion_recargar
        ;;
    status)
        accion_estado
        ;;
    *)
        echo "Uso: $0 {start|stop|restart|reload|status}" >&2
        exit 1
        ;;
esac

Script init.d para Nginx

Este script se integra con el sistema init.d para gestionar Nginx como servicio. Incluye funciones para pruebas de configuración y gestión de procesos.

#!/bin/bash
# Servicio init.d para Nginx

# Cargar bibliotecas del sistema
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network

[ "$NETWORKING" = "no" ] && exit 0

binario_nginx="/usr/local/nginx/sbin/nginx"
nombre_prog=$(basename "$binario_nginx")
archivo_conf="/usr/local/nginx/conf/nginx.conf"
archivo_bloqueo="/var/lock/subsys/nginx"

iniciar() {
    [ -x "$binario_nginx" ] || exit 5
    [ -f "$archivo_conf" ] || exit 6
    echo -n "Iniciando $nombre_prog: "
    daemon "$binario_nginx" -c "$archivo_conf"
    resultado=$?
    echo
    [ $resultado -eq 0 ] && touch "$archivo_bloqueo"
    return $resultado
}

detener() {
    echo -n "Deteniendo $nombre_prog: "
    killproc "$nombre_prog" -QUIT
    resultado=$?
    echo
    [ $resultado -eq 0 ] && rm -f "$archivo_bloqueo"
    return $resultado
}

recargar() {
    probar_config || return $?
    echo -n "Recargando $nombre_prog: "
    killproc "$binario_nginx" -HUP
    resultado=$?
    echo
}

probar_config() {
    "$binario_nginx" -t -c "$archivo_conf"
}

case "$1" in
    start)
        status "$nombre_prog" >/dev/null 2>&1 && exit 0
        iniciar
        ;;
    stop)
        status "$nombre_prog" >/dev/null 2>&1 || exit 0
        detener
        ;;
    restart)
        probar_config || exit $?
        detener
        sleep 1
        iniciar
        ;;
    reload)
        status "$nombre_prog" >/dev/null 2>&1 || exit 7
        recargar
        ;;
    status)
        status "$nombre_prog"
        ;;
    *)
        echo "Uso: $0 {start|stop|restart|reload|status}" >&2
        exit 2
        ;;
esac

Para activar el servicio, otorgue permisos de ejecución y configúrelo con chkconfig:

chmod +x /etc/init.d/nginx
chkconfig nginx on

Posteriormente, puede gestionar Nginx con comandos como service nginx start o directamente desde /etc/init.d/nginx.

Script init.d para PHP-FPM

Este script controla el demonio PHP-FPM, permitiendo iniciar, detener y recargar la configuración.

#!/bin/bash
# Servicio init.d para PHP-FPM

. /etc/rc.d/init.d/functions

ruta_php="/usr/local/php"
nombre_servicio="php-fpm"
binario="$ruta_php/sbin/$nombre_servicio"
archivo_conf="$ruta_php/etc/php-fpm.conf"
pid_archivo="$ruta_php/var/run/$nombre_servicio.pid"

[ -x "$binario" ] || exit 0

iniciar_servicio() {
    "$binario" -y "$archivo_conf" || echo -n " ya en ejecución"
}

detener_servicio() {
    kill -QUIT "$(cat "$pid_archivo")" || echo -n " no estaba corriendo"
}

recargar_servicio() {
    kill -HUP "$(cat "$pid_archivo")" || echo -n " no se puede recargar"
}

case "$1" in
    start)
        echo -n "Iniciando $nombre_servicio: "
        iniciar_servicio
        echo "."
        ;;
    stop)
        echo -n "Deteniendo $nombre_servicio: "
        detener_servicio
        echo "."
        ;;
    reload)
        echo -n "Recargando configuración de $nombre_servicio: "
        recargar_servicio
        echo "recargado."
        ;;
    restart)
        echo -n "Reiniciando $nombre_servicio: "
        detener_servicio
        sleep 1
        iniciar_servicio
        echo "."
        ;;
    *)
        echo "Uso: /etc/init.d/$nombre_servicio {start|stop|restart|reload}" >&2
        exit 3
        ;;
esac
exit 0

Para configurar el servicio, ejecute:

chmod +x /etc/init.d/php-fpm
chkconfig php-fpm on

Asegúrese de que el archivo php-fpm.conf tenga definida la directiva pid para el archivo PID.

Configuración de MySQL como servicio

El script de MySQL generalmente se copia desde los archivos de soporte de la instalación. Para integrarlo con init.d, utilice:

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start

Este método permite administrar MySQL con comandos estándar del sistema.

Etiquetas: bash Nginx PHP-FPM MySQL init.d

Publicado el 7-21 18:09