GNU/Linux >> Linux Esercitazione >  >> Linux

Comprendere gli script rc in Linux

Lo script rc

Quando init entra in un runlevel, chiama lo script rc con un argomento numerico che specifica il runlevel a cui andare. rc quindi avvia e arresta i servizi sul sistema secondo necessità per portare il sistema a quel runlevel. Sebbene in genere venga chiamato all'avvio, lo script rc può essere chiamato da init per modificare i runlevel. Ad esempio, è possibile utilizzare quanto segue per modificare il sistema al runlevel 3:

# init 3

Quando si passa al runlevel 3, rc porta il sistema nel nuovo runlevel arrestando tutti i servizi che non dovrebbero essere eseguiti nel runlevel 3 e avviando tutti i servizi eseguiti nel runlevel 3 che non sono già in esecuzione.

Troverai tutti gli script di inizializzazione del sistema in /etc/rc.d. Questa sottodirectory ha più sottodirectory, una per ogni runlevel:rc0.d–rc6.d e init.d . All'interno delle sottodirectory /etc/rc.d/rc#.d (dove # è sostituito da un numero a una cifra) sono presenti collegamenti simbolici agli script master archiviati in /etc/rc.d/init.d.

# ls -lrt /etc/rc.d
total 60
-rwxr-xr-x  1 root root   889 Jan 29  2015 rc.local
-rwxr-xr-x  1 root root 20199 Oct  4  2017 rc.sysinit
-rwxr-xr-x  1 root root  2617 Oct  4  2017 rc
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 init.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc1.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc0.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc6.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc4.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc3.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc2.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc5.d

Gli script in init.d accettano un argomento di avvio o arresto e, occasionalmente, di ricarica o riavvio.

Implementazione a livello di esecuzione

I runlevel sono implementati come directory sul sistema che contengono script di shell per avviare e arrestare demoni specifici, ad es. /etc/rc1.d/. La maggior parte dei sistemi ha directory per i runlevel 0-6.

Gli script all'interno di ciascuna directory sono denominati con una S maiuscola o una K maiuscola , seguito da un numero a due cifre, seguito dal nome del servizio a cui si fa riferimento. I file che iniziano con la S maiuscola rappresentano gli script che vengono avviati entrando in quel runlevel, mentre i file che iniziano con la K maiuscola rappresentano gli script che vengono interrotti. I numeri specificano l'ordine in cui devono essere eseguiti gli script.

Ad esempio, un demone potrebbe avere uno script chiamato S35daemon in rc3.d/ e uno script chiamato K65daemon per fermarlo in rc2.d/. Avere i numeri all'inizio del nome del file fa sì che vengano ordinati ed elaborati nell'ordine desiderato.

/etc/rc

Quando il programma /etc/rc viene chiamato da init per cambiare i runlevel, lo fa andando nella directory del runlevel di destinazione e lavora attraverso tutti i file K##script per fermare i servizi attualmente in esecuzione che non dovrebbero essere nel runlevel di destinazione e S##script per i servizi che dovrebbero essere, ma non sono attualmente, in esecuzione nel runlevel di destinazione.

A causa del modo in cui il programma /etc/rc funziona su Linux, le singole directory /etc/rc#.d/ avranno solo uno script S## o un collegamento simbolico K##script per ogni servizio. Ci sarà anche un collegamento simbolico per ogni servizio in ciascuna delle sette directory /etc/rc#.d/. Con l'eccezione del file S99local (collegamento simbolico a ../rc.local), che appare solo in /etc/rc1.d/ tramite /etc/rc5.d/ e non ha un collegamento simbolico kill corrispondente, dovrebbe esserci sempre lo stesso numero di file in ciascuna delle directory di runlevel.

Dipendenze dell'ordine all'avvio

È importante che gli script inizino e si interrompano nell'ordine corretto. Ad esempio, affinché NFS e NIS funzionino correttamente, è necessario avviare prima il daemon portmapper RPC rpcbind.

/etc/init.d/

Per evitare la duplicazione degli script, i file nelle directory rc#.d/ sono in realtà collegamenti simbolici ai file di script che si trovano nella directory /etc/init.d/. Ogni servizio installato sul sistema installa uno script in questa directory che può essere utilizzato per controllare quel servizio. Questi script vengono scritti per accettare le opzioni di avvio specificando che devono avviare il servizio e le opzioni di arresto specificando che devono arrestare il servizio.

Compatibilità con Upstart e SysV Runlevel

Poiché Upstart non ha alcuna nozione interna di runlevel, il supporto per essi è definito dal file /etc/init/rc.conf. Questo supporto esiste per fornire la compatibilità con le versioni precedenti per la specifica Unix singola e le precedenti implementazioni SysV Init.

/etc/rc.local

È possibile creare script personalizzati per eseguire attività sul sistema nella directory /etc/init.d/ e quindi è possibile creare collegamenti simbolici a tali script nelle directory /etc/rc#.d/ per avviare o interrompere gli script come necessario. Per alcune attività, tuttavia, la creazione di script di inizializzazione in pieno stile System V, completi di opzioni di avvio e arresto, è eccessiva; alcune attività, ad esempio, devono essere eseguite una volta all'avvio del sistema, ma non devono mai essere terminate, o non devono essere eseguite ogni volta che il sistema cambia runlevel, o per altri motivi non sono totalmente suscettibili di esecuzione da un Script di inizializzazione del sistema V.


Linux
  1. Qual è l'attuale runlevel del sistema Linux?

  2. Linux:come modificare la password di root dimenticata?

  3. Linux:la barra (/) fa parte del nome della directory principale di Linux?

  4. Comprendere le politiche di SELinux in Linux

  5. Comprendere il file /etc/inittab in Linux

Comprendere i runlevel di Linux nel modo giusto

Comprendere il ciclo for negli script della shell

Come modificare la password di root in Linux

Comprendere il comando dell'ora in Linux

Comprendere il file /etc/fstab in Linux

Come modificare la password dell'account di root di Linux VPS