it-swarm-eu.dev

Účel a typické použití /etc/rc.local

Záhlaví vypadá takto:

#!/bin/sh -e
#
# rc.local - executed at the end of each multiuser runlevel
#
# Make sure that the script will "exit 0" on success or any other
# value on error.

Jaký je důvod tohoto souboru (neobsahuje mnoho) a jaké příkazy do něj obvykle zadáváte? Co je to „víceuživatelský runlevel“? (Myslím, že rc jsou "příkazy pro spuštění"?)

79
Emanuel Berg

runlevel je stav systému, označující, zda je v procesu bootování, restartování nebo vypnutí, nebo v režimu pro jednoho uživatele, nebo běží normálně. Tradiční program init tyto akce zpracovává přepnutím na odpovídající úroveň běhu. V Linuxu jsou runlevely jsou konvenční :

  • S při bootování,
  • 0 při vypínání,
  • 6 při restartování,
  • 1 v režimu pro jednoho uživatele a
  • 2 až 5 v normálním provozu.

Runlevely 2 až 5 jsou známé jako víceuživatelské runlevely, protože umožňují více uživatelům přihlásit se, na rozdíl od runlevel 1, který je určen pouze pro správce systému.

Když se úroveň běhu změní, init spustí rc skripty (v systémech s tradičními init - existují alternativy, jako pstart a Systemd ). Tyto rc skripty obvykle spouštějí a zastavují systémové služby a jsou poskytovány distribucí.

Scénář /etc/rc.local je určen pro správce systému. Tradičně se provádí po spuštění všech běžných systémových služeb, na konci procesu přechodu na víceuživatelskou úroveň běhu. Můžete jej použít ke spuštění vlastní služby, například serveru nainstalovaného v /usr/local. Většina instalací nepotřebuje /etc/rc.local, poskytuje se pro menšinu případů, kdy je to potřeba.

rc označuje "run-control",

Hladina multiuser by byla definována jako úroveň, na které je síť k dispozici, a tak by bylo možné navázat spojení se serverem pomocí těchto služeb namísto pevných kabelových připojení konzoly.

Nezapomeňte, že servery jsou obecně spravovány servisním procesorem (pod různými jmény), který podporuje síťová připojení a zase působí, jako byste skutečně měli pevně připojenou konzoli.

Jako pro rc.local_, to je výhoda, která vám umožní určit všechny "lokální" (site-specific) objekty (démony a/nebo skripty při spuštění), které chcete spustit. Můžete se rozhodnout použít toto paradigma nebo skutečně naplnit '/etc/init.d' skripty start/stop.

14
JRFerguson

Používám ho hlavně pro dvě věci:

  1. protokolovat datum a verzi jádra každého restartu. jednoduchý jednoplášťový systém, který lze snadno přidat do systémů, aniž by došlo k vycpávání ... a mnohem méně náchylné k poškození historie spouštění než spuštění uptimed.

  2. oživit starý adresář /etc/rc.boot/, který byl až před několika lety v debianu. Stále tam mám několik jednoduchých skriptů, které nestojí za námahu přepisovat jako skript init.d (např. Skript Q&D pro zasílání dmesg do kořenového adresáře a další pomocí hdaparmu k deaktivaci nečinného spindownu a blockdev k nastavení čtení - velikost dopředu) a jsem rád, že je lze spustit po všech ostatních skriptech spouštěcího času.

např.

echo "$(date +%s),$(date),$(uname -a)"  >> /var/log/reboot.log

[ -d /etc/rc.boot ] && run-parts /etc/rc.boot

Začátkem tohoto roku jsem také psal /etc/rc.local skripty pro centos a debian distros, abych získal metadata ve stylu ec2 z openstacku (na http://169.254.169.254/), aby VM získaly svou IP adresu, název hostitele, klíče ssh a další informace specifické pro instanci. cloud-init byl od té doby přenesen na tato distros, takže skripty jsou nyní zastaralé.

4
cas

The rc.local file on Debian je většinou pro kompatibilitu s non-init systémy stylů. Neměli byste ji používat.

Místo toho se doporučuje zkopírovat /etc/init.d/Skeleton k novému inicializačnímu skriptu pro cokoli, co se má stát, když měníte úrovně běhu, a poté jej povolte pomocí inserv.


Aktualizace: Podle komentáře níže se tato odpověď již nedoporučuje. Tato odpověď však byla zveřejněna několik let před znehodnocení kostry a tato kostra stále existuje v Debianu nestabilní od ledna 2019.

3
bahamat