Creé un archivo en /etc/rc0.d
, lo nombré rc.local
.
En este archivo agregué una línea que ejecuta otro archivo que había colocado Desktop
. Hice todo esto para que el comando se pueda ejecutar al arrancar. Seguílas instrucciones de este artículo(el primer método), pero nada parece funcionar.
¿Por qué esto no funciona?
Respuesta1
/etc/rc.d/
En las instrucciones que vinculó se menciona un directorio principalmente histórico que alguna vez se usó para agrupar todos los directorios de secuencias de comandos de inicio: habría habido /etc/rc.d/init.d/
, y /etc/rc.d/rc0.d/
así /etc/rc.d/rc1.d
sucesivamente. La mayoría de las distribuciones modernas hace tiempo que optaron por omitir el rc.d
directorio y colocar los demás directorios directamente bajo /etc/
.
/etc/rc0.d/
se supone que contiene enlaces simbólicos a scripts (la ubicación real de los scripts debe ser /etc/init.d/
) que deben ejecutarse enapagado o apagado del sistema.
/etc/rc6.d/
es para enlaces a scripts que deben ejecutarse enreiniciar(es decir, cuando se apaga el sistema con la intención de reiniciarlo inmediatamente nuevamente, como después de instalar una actualización del kernel).
El directorio más apropiado para un enlace a su script sería o /etc/rc3.d/
, /etc/rc5.d/
según la configuración de su sistema y el nivel de ejecución predeterminado de su sistema (si usa SysVinit). Las distribuciones de Linux basadas en Debian generalmente usan el nivel de ejecución 3 para el estado multiusuario normal (asumiendo SysVinit clásico), mientras que aquellas basadas en RedHat/Fedora usarían el nivel de ejecución 5 para el estado multiusuario con el inicio de sesión GUI habilitado y el nivel de ejecución 3 para el estado multiusuario. con el subsistema GUI X11 local deshabilitado.
Los nombres de los enlaces simbólicos en cualquier /etc/rc?.d/
directorio deben comenzar con S mayúscula o K mayúscula, seguidos de un número (generalmente) de dos dígitos para identificar la ubicación relativa del script en el orden de inicio, entre otros. enlaces en ese directorio. La S mayúscula haría que el sistema ejecutara el script vinculado con el parámetro de línea de comando start
, mientras que K haría que stop
se usara el parámetro en su lugar.
Entonces, su secuencia de comandos debería haberse colocado en /etc/init.d/rc.local
y luego debería haber creado uno o ambos enlaces simbólicos como este:
ln -s /etc/init.d/rc.local /etc/rc3.d/S99rc.local
ln -s /etc/init.d/rc.local /etc/rc5.d/S99rc.local
¡Pero eso no es todo!
Las distribuciones modernas de Linux, incluso aquellas que usan SysVinit clásico en lugar de systemd
, tienden a usar varias soluciones para paralelizar la ejecución de varias tareas de inicio del sistema en lugar de ejecutarlas estrictamente una por una. Esto se debe a que en las CPU modernas de múltiples núcleos, la paralelización hará que el proceso de arranque sea mucho más rápido. En este caso, debe agregar un bloque de comentarios con formato específico al comienzo de su secuencia de comandos para definir de qué servicios del sistema depende su secuencia de comandos; de lo contrario, la lógica de paralelización podría ejecutar la secuencia de comandos.demasiado pronto, antes de que se inicien primero los servicios del sistema requeridos.
Si su distribución usa systemd
, esto es especialmente importante, ya que incluso el valor predeterminado "predeterminado de fábrica" de algunas distribuciones rc.local
se ejecuta bastante temprano en el proceso de inicio, a menos que agregue definiciones de dependencia adecuadas.
Verhttp://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/initscrcomconv.htmlpara conocer las especificaciones actuales del bloque de comentarios recomendado para scripts de inicio/apagado estilo SysVinit.
En pocas palabras, es posible que desees algo como esto al comienzo de tu rc.local
script:
### BEGIN INIT INFO
# Provides: rc.local
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: run locally-configured start-up commands
### END INIT INFO
En mi opinión, el Método-1 enlas instrucciones que vinculasteContiene consejos incompletos y antiguos. Los otros dos métodos pueden ser más fáciles para un usuario nuevo, pero no incluyen instrucciones sobre cómo determinar si esos métodos son aplicables o no en una distribución determinada.