Come posso far funzionare "rc.local" all'avvio?


75

Ho uno script che vorrei eseguire all'avvio del mio sistema. L'ho messo su "rc.local", ma non funziona. Come posso abilitarlo all'avvio?


1
Dov'è il comando xsetwacom? /etc/rc.local viene eseguito con un PERCORSO molto semplice all'avvio. Probabilmente differisce dal PERCORSO che hai effettuato l'accesso al terminale. Nel terminale, digitare: digitare -p xsetwacom quindi sostituire il comando "xsetwacom" in /etc/rc.local con il percorso completo restituito da "type -p". Devi effettuare inizializzazioni manuali prima che xsetwacom funzioni per te?
Waltinator,

3
Usando systemd come startup manager assicurati che la compatibilità rc.local sia in esecuzione:systemctl status rc-local.service
rubo77

Il commento di Waltinator era il mio problema. A causa del percorso minimo, non sapeva come eseguire gli script che volevo essere eseguiti. Il percorso caricato sul mio sistema Ubuntu 14.04 al momento di runninig /etc/rc.local era il seguente: / sbin: / usr / sbin: / bin: / usr / bin ... puoi controllare il tuo inserendo il echo $PATH > /home/rc_local_pathtuo / etc / rc.local e quindi controllando il file dopo che è stato eseguito all'avvio.
RaisinBranCrunch

Tieni presente che se il tuo script deve essere eseguito continuamente, devi avviarlo come un demone nel rc.localfile!
totymedli,

Utilizzare sudo systemctl enable rc-local.serviceper assicurarsi che /etc/rc.local venga eseguito durante l'avvio del server
William

Risposte:


56

Puoi eseguire lo script manualmente? Altrimenti, è un problema con quello script; altrimenti guarda di più su rc.local. (Se lo script deve essere eseguito come root, è necessario utilizzare sudo per eseguirlo manualmente.)

Assicurati che /etc/rc.local sia eseguibile e che anche lo script che chiama sia eseguibile.

$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 419 2010-08-27 11:26 /etc/rc.local

Assicurati che rc.local abbia una riga shebang (che è l'impostazione predefinita):

$ head -n1 /etc/rc.local
#!/bin/sh -e

Sì, posso eseguire lo script manualmente. Come posso assicurarmi che /etc/rc.local sia eseguibile? Cosa devo digitare? È "$ ls -l /etc/rc.local -rwxr-xr-x 1"? Grazie!
pedroo,

@pedroo: ho copiato esattamente quello che vedo nel mio terminale (quindi vedi il prompt, input e output tutti sopra). Il comando è "ls -l /etc/rc.local" e se è eseguibile, avrà quelle X nell'output.

3
Ho provato "ls -l /etc/rc.local" ed è eseguibile, ma non riesco a farlo funzionare all'avvio ... Qualche idea?
pedroo,

1
@pedroo: è necessario che il server X sia in esecuzione, il che non accade quando viene eseguito rc.local. Eseguirlo da rc.local lo farà uscire senza fare nulla (anche se spero che metta un messaggio in syslog o altrove). Devi invece inserire i comandi xsetwacom in ~ / .xinitrc o / etc / X / xinit / xinitrc.

1
@pedroo: Perché rc.local contiene comandi destinati a essere eseguiti in un momento diverso. Crea un nuovo file, puoi inserirlo in ~ / bin , contrassegnarlo come eseguibile (chmod o proprietà in Nautilus), creare la prima riga "#! / Bin / bash", quindi inserire i tuoi comandi su righe successive.

53

Nel mio caso nessuna delle istruzioni era una soluzione perfetta. Se sei stato sfortunato come me, prova questo dettagliato

  1. Metti tutto il tuo codice di esecuzione in un file di testo separato con un nome arbitrario come foo.sh e salvalo in un posto arbitrario.
  2. Inserisci

    #!/bin/sh

    come prima riga del tuo codice.

  3. Prova a eseguire il tuo foo.sh da

    sudo foo.sh

    per verificare che non ci siano errori.

  4. Fornisci allo script /etc/rc.local il percorso completo e il nome dello script creato dopo il comando sh

    sh '/path/to/your/script/foo.sh'
  5. Ricorda di mettere la riga sopra prima dell'ultima riga di codice

    exit 0

    alla fine dello script /etc/rc.local.

  6. Controlla che la prima riga di /etc/rc.local sia

    #!/bin/sh -e
  7. Rendi eseguibile il tuo /etc/rc.local nel caso in cui non sia già eseguibile da

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
  8. Controlla che tutto funzioni correttamente eseguendo

    sudo /etc/init.d/rc.local start
  9. Test riavvia il tuo sistema.

6
Il passaggio n. 8 è stato la chiave, verificando che lo script verrà eseguito nell'ambiente di avvio. Nel mio caso, devo fornire il percorso completo del comando.
Peter Gluck,

Prefetto e passo per passo grandi, funziona su centos ma sudo /etc/rc.local startprima esecuzione.
A1Gard

Grazie - questa rottura mi ha aiutato davvero e come sopra il passaggio 8 è stata la chiave anche per me! Senza di ciò non reindirizzerebbe +1 (per riferimento, l'app nodo in esecuzione sul server cloud bitnami utilizza per sempre per l'esecuzione continua).
fidev,

Il passaggio 8 è stato un buon suggerimento, ma penso che il passaggio 7 potrebbe essere ciò che ha risolto il mio, stavo cercando di eseguire lo script usando cron per aprire un tunnel ma non funzionava in modo casuale
SeanClt,

28

Nelle versioni più recenti di Ubuntu systemdviene utilizzata e /etc/rc.localnon viene caricata sempre per impostazione predefinita.

Verifica se il servizio di compatibilità è caricato

systemctl status rc-local.service

immagine dello schermo

Se contiene attivo (uscito) la tua impostazione sembra a posto e potresti avere un altro errore nel tuo /etc/rc.localfile (questo potrebbe essere un comando che fallisce per esempio).


4
se rc-local.service non è attivato, controlla questo post che spiega come abilitare /etc/rc.local con
Systemd

3

2 suggerimenti.

  1. Assicurarsi che anche il file di script di destinazione sia contrassegnato come eseguibile.
  2. Lo script target esegue un comando sudo ? In tal caso, potresti voler fornire la password sudo.

Colpa mia. Basta controllarne uno allora. Grazie per la correzione enzotib :)


8
rc.localviene eseguito come root, quindi non è necessaria alcuna password.
enzotib,
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.