Perché il comando in /etc/rc.local non viene eseguito durante l'avvio?


39

Nel mio /etc/rc.localscript ho un solo comando che dovrebbe avviare il daemon di aggiornamento per Tiny Tiny RSS durante l'avvio, ma lo script non viene eseguito durante l'avvio. Perché?

L'intero file /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 è eseguibile:

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

/etc/init.d/rc.local esiste ed è eseguibile:

# 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 dovrebbe essere eseguito all'avvio per questo runlevel:

# 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

Se chiamo manualmente /etc/rc.local dalla riga di comando carica 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

... che devo ricordare di fare ogni volta che il mio server si riavvia fino a quando questo problema non viene risolto.

Esistono già domande simili , ma finora non sono stato in grado di applicare le informazioni all'interno del mio problema specifico.

Perché il comando in rc.local non viene eseguito durante l'avvio?


Potrebbe essere dovuto requirettyall'impostazione. Quando si è effettuato l'accesso, si sta eseguendo lo script in TTY ma durante l'avvio del sistema, non è in TTY. Questo link può aiutarti shell-tips.com/2014/09/08/… Grazie.
KICT

Risposte:


23

rc.locallo script esce se si verifica un errore durante l'esecuzione di uno dei suoi comandi (menzionare il -eflag in #!/bin/sh -e).

È possibile che alcuni prerequisiti non vengano soddisfatti quando si tenta di eseguire i comandi quando viene eseguita l' rc.localesecuzione, pertanto l'esecuzione dei comandi non riesce.

Ho riscontrato la stessa cosa durante l'impostazione manuale del regolatore della CPU e non riuscendo a farlo rc.local. Ecco la mia soluzione personalizzata, che utilizza update-rc.dper eseguire i comandi all'avvio:

  1. Crea un file myscript.shnella directory /etc/init.dcon un'intestazione:#!/bin/sh
  2. Inserisci i tuoi comandi personalizzati come contenuto
  3. Renderlo eseguibile: sudo chmod +x /etc/init.d/myscript.sh
  4. Crea collegamenti simbolici per il tuo script per vari runlevel: sudo update-rc.d myscript.sh defaults

Inoltre, è possibile controllare gli /etc/network/if-up.dscript e vedere se è possibile attivare i comandi all'avvio della rete.


Grazie per la risposta. La mia configurazione è cambiata da quando ho pubblicato la domanda, quindi non sono in grado di verificare se la tua risposta avrebbe risolto il problema.
XX

Per favore, dimmi cosa fa il passo 4? Sono nuovo diupdate-rc.d
Mohith7548

7

ho avuto qualche problema simile in rc.local non eseguito all'avvio

sshades mi ha fornito la seguente risposta:

Ubuntu ora utilizza systemd e rc.local è ora considerato un servizio disattivato per impostazione predefinita. È possibile attivare rc.local "on" immettendo il comando seguente e riavviando:

sudo systemctl enable rc-local.service

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

anche se non ho testato la sua soluzione, penso che suoni logico e funzionerà. Tuttavia :

Ho anche trovato una soluzione che aggiungendo uno script a ./.config/autostart-scripts/ farà il trucco


7
Ottenere questo errore. I file di unità non hanno alcuna configurazione di installazione (WantedBy, RequiredBy, Also, Alias ​​settings nella sezione [Install] e DefaultInstance per le unità modello). Questo significa che non sono pensati per essere abilitati usando systemctl. Le possibili ragioni per avere questo tipo di unità sono: 1) Un'unità può essere abilitata staticamente tramite il collegamento simbolico dalla directory .wants / o .requires / di un'altra unità. 2) Lo scopo di un'unità può essere quello di fungere da supporto per un'altra unità che ha una dipendenza dai requisiti da essa.
Rıfat Erdem Sahin,

Ricevo anche questo errore. Se rc.localè disattivato, qual è l'alternativa?
Ben

5

prova sudo sysv-rc-confe controlla se rc.localè abilitato

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]

Sì, è abilitato.
XX

questo comando deve essere installato?
jcollum,

1
@jcollum sì, è un programma di un pacchetto chiamato lo stesso. Per installare, digitaresudo apt install sysv-rc-conf
banan3'14

rc.localnon è nemmeno nella mia lista di servizi!
Ben

5

Assicurarsi che lo script rc.local sia eseguibile:

sudo chmod +x /etc/rc.local

Quindi, abilitalo:

sudo systemctl enable rc-local.service

Riavvia il sistema o avvia lo script manualmente eseguendo:

sudo systemctl start  rc-local.service

Lo stato del servizio può essere visualizzato eseguendo:

$ 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

Non è necessario abilitare manualmente il servizio. Se il file esiste ed è eseguibile, systemd abiliterà automaticamente il rc-localservizio.
muru,

4

Abbiamo riscontrato questo problema su alcuni server ospitati durante il caricamento delle regole FW.

Su queste caselle si riavviano MOLTO rapidamente e abbiamo scoperto che basta inserire "sleep 1" in rc.local prima che le istruzioni di caricamento sembrino risolvere il problema. Immagino che ci sia voluto un po 'di tempo prima che le interfacce si stabilizzassero prima di caricare le regole FW.


1
Grazie. sleep 1risolto il mio problema Interessante Ho molti server ma solo uno ha questo problema.
Qian Chen,

1

Una volta ho modificato rc.localcon Blocco note in Windows e ha iniziato ad avere questo problema.

In questo caso, l'utilizzo di un editor di testo supporta la conversione EOL, come Notepad ++, per convertire lo stile EOL in "Unix", potrebbe risolverlo.

Puoi farlo anche :set ff=unixin Vim.


1

Ho trovato nei contenitori Ubuntu lxc che se rc.local ha un shebang perfettamente corretto, ad es

#!/bin/sh

fallisce, ma se rimuovi il pasticcio funziona.

Non sono arrivato al fondo del perché o della shell che usa, penso che bombe anche sul primo diverso da zero. (In altre installazioni di Ubuntu il corretto shebang non è un problema)


0

Dovrai assicurarti che /etc/rc.localvenga eseguito durante l'avvio del server con il comando:

sudo systemctl enable rc-local.service

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.