¿Por qué el comando en /etc/rc.local no se ejecuta durante el inicio?

39

Tengo un solo comando en mi /etc/rc.localscript que se supone que inicia el demonio de actualización para Tiny Tiny RSS durante el inicio, pero el script no se ejecuta durante el inicio. ¿Por qué?

Todo el archivo /etc/rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet

exit 0

/etc/rc.local es ejecutable:

# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local

/etc/init.d/rc.local existe y es ejecutable:

# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27  2012 /etc/init.d/rc.local

/etc/init.d/rc.local se supone que debe ejecutarse al inicio para este nivel de ejecución:

# runlevel 
N 2
# ls -l /etc/rc2.d/S99rc.local 
lrwxrwxrwx 1 root root 18 Sep 22  2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local

Si llamo manualmente /etc/rc.local desde la línea de comandos, se carga update_daemon ...

# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet

... que debo recordar hacer cada vez que mi servidor se reinicie hasta que se solucione este problema.

Ya existen preguntas similares , pero hasta ahora no he podido aplicar la información dentro de mi problema específico.

¿Por qué el comando en rc.local no se ejecuta durante el inicio?

xx
fuente
Puede ser debido a la requirettyconfiguración. Cuando inicia sesión, está ejecutando el script en TTY pero durante el inicio del sistema, no está en TTY. Este enlace puede ayudarlo shell-tips.com/2014/09/08/… Gracias.
KICT

Respuestas:

23

rc.localla secuencia de comandos se cierra si se produce algún error al ejecutar cualquiera de sus comandos (mencione el -eindicador en #!/bin/sh -e).

Es posible que algunos requisitos previos no se cumplan cuando intenta ejecutar sus comandos cuando se rc.locallleva a cabo la ejecución, por lo que la ejecución de su comando falla.

Encontré lo mismo al configurar manualmente el gobernador de la CPU y no hacerlo rc.local. Aquí está mi solución personalizada, que utiliza update-rc.dpara hacer que sus comandos se ejecuten al inicio:

  1. Cree un archivo myscript.shen el directorio /etc/init.dcon un encabezado:#!/bin/sh
  2. Pon tus comandos personalizados como contenido
  3. Hazlo ejecutable: sudo chmod +x /etc/init.d/myscript.sh
  4. Crea enlaces simbólicos para tu script para varios niveles de ejecución: sudo update-rc.d myscript.sh defaults

Además, puede verificar los /etc/network/if-up.dscripts y ver si puede activar sus comandos cuando se inicia la red.

Dibujó
fuente
Gracias por la respuesta. Mi configuración ha cambiado desde que publiqué la pregunta, por lo que no puedo probar si su respuesta habría resuelto el problema.
xx
Por favor, dime qué hace el paso 4? Soy nuevo enupdate-rc.d
Mohith7548
7

Tuve un problema similar en rc.local no se ejecuta al inicio

Shades me proporcionó la siguiente respuesta:

Ubuntu ahora está usando systemd, y rc.local ahora se considera un servicio que está "desactivado" de forma predeterminada. Puede activar "rc.local" ingresando el siguiente comando y reiniciando:

sudo systemctl enable rc-local.service

https://askubuntu.com/a/770033/395498

Aunque no he probado su solución, creo que suena lógico y funcionará. Sin embargo :

También encontré una solución que agregar un script a ./.config/autostart-scripts/ hará el truco

Diet Bos
fuente
77
Obteniendo este error. Los archivos de la unidad no tienen configuración de instalación (WantedBy, RequiredBy, también, configuración de alias en la sección [Instalar] y DefaultInstance para las unidades de plantilla). Esto significa que no deben habilitarse mediante systemctl. Las posibles razones para tener este tipo de unidades son: 1) Una unidad puede habilitarse estáticamente al vincularse simbólicamente desde el directorio .wants / o .requires / de otra unidad. 2) El propósito de una unidad puede ser actuar como ayudante para otra unidad que tiene una dependencia de requisitos.
Rıfat Erdem Sahin
También recibo este error. Si rc.localestá apagado, ¿cuál es la alternativa?
Ben
5

prueba sudo sysv-rc-confy comprueba si rc.localestá habilitado

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]
zuba
fuente
Sí, está habilitado.
xx
¿Este comando necesita ser instalado?
jcollum
1
@jcollum sí, es un programa de un paquete llamado igual. Para instalar, escribasudo apt install sysv-rc-conf
banan3'14
rc.localni siquiera está en mi lista de servicios!
Ben
5

Asegúrese de que el script rc.local sea ejecutable:

sudo chmod +x /etc/rc.local

Luego, habilítelo:

sudo systemctl enable rc-local.service

Reinicie el sistema o inicie el script manualmente ejecutando:

sudo systemctl start  rc-local.service

El estado del servicio se puede mostrar ejecutando:

$ sudo systemctl status rc-local.service
 rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) 
Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago
  Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 2049 (svscanboot)
Tasks: 3
 Memory: 556.0K
CPU: 10ms
CGroup: /system.slice/rc-local.service
leobocao
fuente
No necesita habilitar manualmente el servicio. Si el archivo existe y es ejecutable, systemd habilitará automáticamente el rc-localservicio.
muru
4

Tuvimos este problema en algunos servidores alojados que cargaban reglas FW.

En estos cuadros se reinician MUY rápido y encontramos que simplemente colocamos un "sleep 1" en rc.local antes de que las declaraciones de carga parezcan solucionar el problema. Supongo que dio un poco de tiempo para que se establecieran las interfaces antes de cargar las reglas de FW.

Simon Hart
fuente
1
Gracias. sleep 1resuelto mi problema Interesante, tengo muchos servidores pero solo uno tiene este problema.
Qian Chen
1

Una vez edité rc.localcon el Bloc de notas en Windows y comenzó a tener este problema.

En este caso, el uso de un editor de texto admite la conversión EOL, como Notepad ++, para convertir el estilo EOL a 'Unix', puede resolverlo.

También puedes hacerlo :set ff=unixen Vim.

SyaSyaNown
fuente
1

Encontré en Ubuntu lxc contenedores que si rc.local tiene un shebang perfectamente correcto, por ejemplo

#!/bin/sh

falla, pero si quitas el shebang funciona.

No llegó al fondo de por qué o qué caparazón usa, creo que también bombardea en el primer no cero. (En otras instalaciones de Ubuntu, el shebang adecuado no es un problema)

teknopaul
fuente
0

Deberá asegurarse de que /etc/rc.localse ejecute durante el inicio del servidor con el comando:

sudo systemctl enable rc-local.service

Guillermo
fuente