El encabezado se ve así:
#!/bin/sh -e
#
# rc.local - executed at the end of each multiuser runlevel
#
# Make sure that the script will "exit 0" on success or any other
# value on error.
¿Cuál es la razón de este archivo (no contiene mucho) y qué comandos usualmente incluye? ¿Qué es un "nivel de ejecución multiusuario"? (Supongo que rc
es "ejecutar comandos"?)
debian
configuration
startup
Emanuel Berg
fuente
fuente
Respuestas:
Un nivel de ejecución es un estado del sistema, que indica si se encuentra en el proceso de inicio, reinicio o apagado, o en modo de usuario único, o si se ejecuta normalmente. El programa init tradicional maneja estas acciones cambiando al nivel de ejecución correspondiente. Bajo Linux, los niveles de ejecución son por convención :
Los niveles de ejecución 2 a 5 se conocen como niveles de ejecución multiusuario, ya que permiten que varios usuarios inicien sesión, a diferencia del nivel de ejecución 1, que está destinado solo al administrador del sistema.
Cuando el nivel de ejecución cambia, init ejecuta scripts rc (en sistemas con un init tradicional; hay alternativas, como Upstart y Systemd ). Estos scripts rc generalmente inician y detienen los servicios del sistema, y son proporcionados por la distribución.
El script
/etc/rc.local
es para uso del administrador del sistema. Se ejecuta tradicionalmente después de que se inician todos los servicios normales del sistema, al final del proceso de cambio a un nivel de ejecución multiusuario. Puede usarlo para iniciar un servicio personalizado, por ejemplo, un servidor instalado/usr/local
. La mayoría de las instalaciones no necesitan/etc/rc.local
, se proporciona para la minoría de los casos en que se necesita.fuente
rc.local
no era adecuado por este motivo. Dado que la pregunta original es sobre Debian, este comentario probablemente sea irrelevante para el OP.rc.local
Tradicionalmente se ejecutaba en último lugar, pero veo que FreeBSD dejó de hacerlo cuando cambiaron a un sistema basado en la dependencia. Eso sí, incluso sirc.local
se invocara después/etc/rc.d/sshd
, eso no funcionaría perfectamente:rc.local
se invocaría poco después desshd
que se iniciara el proceso, se podría invocar antes desshd
haber comenzado a escuchar la red (pero estaríamos hablando décimas de segundo en más en una configuración típica).iptables-apply /root/iptables
. Estoy en el proceso de descubrir qué está mal (esperando el próximo reinicio). Pero si tienes alguna sugerencia, soy todo oídos.rc
denota "control de ejecución",El
multiuser
nivel de ejecución se definiría como el nivel en el que la red está disponible y, por lo tanto, las conexiones al servidor podrían realizarse utilizando esos servicios en lugar de las conexiones de consola cableadas.Eso sí, los servidores generalmente son administrados por un procesador de servicios (con varios nombres) que admiten conexiones de red y, a su vez, actúan como si realmente tuvieras una consola cableada.
En cuanto al
rc.local
archivo, esta es una conveniencia que le permite especificar todos los objetos "locales" (específicos del sitio) (demonios y / o scripts de inicio único) que desea iniciar. Puede optar por utilizar este paradigma o llenar '/etc/init.d' con scripts de inicio / detención, de manera adecuada.fuente
Lo uso principalmente para dos cosas:
para registrar la fecha y la versión del núcleo de cada reinicio. una línea simple que se puede agregar fácilmente a los sistemas sin ningún tipo de relleno ... y mucho menos propenso a que el historial de arranque se corrompa que la ejecución
uptimed
.para revivir el antiguo directorio /etc/rc.boot/ que solía estar en Debian hasta hace unos años. Todavía tengo algunas secuencias de comandos simples que no merecen el esfuerzo de reescribir como una secuencia de comandos init.d (por ejemplo, una secuencia de comandos de preguntas y respuestas para enviar dmesg a la raíz, y otra para usar hdaparm para deshabilitar spindown inactivo y blockdev para configurar read- tamaño anterior), y estoy feliz de que se ejecuten después de todos los demás scripts de tiempo de arranque.
p.ej
Además, escribí scripts /etc/rc.local a principios de este año para centos y distribuciones de Debian para obtener los metadatos de estilo ec2 de openstack (on
http://169.254.169.254/
) para que las máquinas virtuales obtengan su IP, nombre de host, claves ssh y otra información específica de la instancia . cloud-init se ha portado desde entonces a estas distribuciones, por lo que los scripts están obsoletos ahora.fuente
El
rc.local
archivo en Debian es principalmente para compatibilidad con sistemas de estilo no init. No deberías usarlo.En su lugar, se recomienda que copie
/etc/init.d/Skeleton
en un nuevo script de inicio para lo que quiera que suceda mientras cambia los niveles de ejecución, y luego useinserv
para habilitarlo.Actualización: según el comentario a continuación, esta respuesta ya no se recomienda. Sin embargo, esta respuesta se publicó varios años antes de la degradación del esqueleto, y ese esqueleto todavía existe en Debian inestable a partir de enero de 2019.
fuente
/etc/init.d/skeleton
no es el camino.