GNU/Linux >> Znalost Linux >  >> Linux

Pochopení rc skriptů v Linuxu

Skript rc

Když init vstoupí do úrovně běhu, zavolá skript rc s číselným argumentem určujícím úroveň běhu, na kterou se má přejít. rc pak spouští a zastavuje služby v systému podle potřeby, aby se systém dostal na danou úroveň běhu. Ačkoli se rc skript obvykle volá při bootování, lze jej zavolat pomocí init ke změně úrovní běhu. Ke změně systému na úroveň běhu 3 lze například použít následující:

# init 3

Při změně na úroveň běhu 3 převede rc systém do nové úrovně běhu zastavením všech služeb, které by neměly běžet v úrovni běhu 3, a spuštěním všech služeb, které běží na úrovni běhu 3 a které ještě nejsou spuštěny.

Všechny inicializační skripty systému najdete v /etc/rc.d. Tento podadresář má více podadresářů, jeden pro každou úroveň běhu:rc0.d–rc6.d a init.d . V podadresářích /etc/rc.d/rc#.d (kde je # nahrazeno jednociferným číslem) jsou symbolické odkazy na hlavní skripty uložené v /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

Skripty v init.d berou argument start nebo stop a občas reload nebo restart.

Implementace na úrovni běhu

Úrovně běhu jsou v systému implementovány jako adresáře, které obsahují skripty shellu pro spouštění a zastavování konkrétních démonů, např. /etc/rc1.d/. Většina systémů má adresáře pro úrovně běhu 0-6.

Skripty v každém adresáři jsou pojmenovány buď velkým S , nebo velké K , za kterým následuje dvoumístné číslo a za ním název odkazované služby. Soubory začínající velkým S představují skripty, které se spouštějí při vstupu do dané úrovně běhu, zatímco soubory začínající velkým K představují skripty, které jsou zastaveny. Čísla určují pořadí, ve kterém by měly být skripty provedeny.

Démon může mít například skript s názvem S35daemon v rc3.d/ a skript s názvem K65daemon, který jej zastaví v rc2.d/. Čísla na začátku názvu souboru způsobí jejich třídění a zpracování v požadovaném pořadí.

/etc/rc

Když init zavolá program /etc/rc, aby změnil úrovně běhu, udělá to tak, že přejde do adresáře pro cílovou úroveň běhu a projde všechny soubory K##script, aby zastavil aktuálně spuštěné služby, které by neměly být v cílové úrovni běhu. a soubory S##script pro služby, které by měly být, ale aktuálně nejsou spuštěny v cílové úrovni běhu.

Vzhledem k tomu, jak program /etc/rc funguje v Linuxu, jednotlivé adresáře /etc/rc#.d/ budou mít pouze symbolický odkaz S##script nebo K##script pro každou službu. V každém ze sedmi adresářů /etc/rc#.d/ bude také symbolický odkaz pro každou službu. S výjimkou souboru S99local (symlink na ../rc.local), který se objevuje pouze v /etc/rc1.d/ až /etc/rc5.d/ a nemá žádný odpovídající symbol zabíjení, by měl být vždy stejný počet souborů v každém z adresářů úrovně běhu.

Závislosti na pořadí při spouštění

Je důležité, aby se skripty spouštěly a zastavovaly ve správném pořadí. Například, aby NFS a NIS správně fungovaly, musí být nejprve spuštěn démon RPC portmapper rpcbind.

/etc/init.d/

Aby se předešlo duplikaci skriptů, jsou soubory v adresářích rc#.d/ ve skutečnosti symbolické odkazy na soubory skriptů umístěné v adresáři /etc/init.d/. Každá služba nainstalovaná v systému nainstaluje do tohoto adresáře skript, který lze použít k ovládání této služby. Tyto skripty jsou napsány tak, aby přebíraly možnosti spuštění určující, že by měly službu spustit, a možnosti zastavení určující, že mají službu zastavit.

Kompatibilita Upstart a SysV Runlevel

Protože Upstart nemá žádnou interní představu o úrovních běhu, jejich podpora je definována souborem /etc/init/rc.conf. Tato podpora existuje pro zajištění zpětné kompatibility pro specifikaci Single Unix a předchozí implementace SysV Init.

/etc/rc.local

Vlastní skripty pro provádění úloh v systému lze vytvořit v adresáři /etc/init.d/ a poté lze vytvořit symbolické odkazy na tyto skripty v adresářích /etc/rc#.d/ pro spouštění nebo zastavování skriptů jako nutné. Pro některé úkoly je však vytváření plnohodnotných init skriptů ve stylu System V, doplněných o možnosti spuštění a zastavení, přehnané; některé úlohy je například nutné provést jednou při spouštění systému, ale nikdy je není třeba zabíjet nebo je není nutné spouštět pokaždé, když systém změní úrovně běhu, nebo z jiných důvodů nejsou zcela přístupné ke spuštění ze systému Skript System V Init.


Linux
  1. Jaká je aktuální úroveň běhu systému Linux?

  2. Linux – Proč je kořenový adresář označen A / Sign?

  3. Porozumění systému souborů sysfs (/sys) v Linuxu

  1. Oprávnění pro Linux 101

  2. Linux – Jak změnit zapomenuté heslo roota?

  3. Pochopení souboru /etc/inittab v Linuxu

  1. Linux – Je lomítko (/) součástí názvu kořenového adresáře Linuxu?

  2. Pochopení zásad SELinux v Linuxu

  3. Pochopení adresáře /etc/skel v Linuxu