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.