Příkaz insserv se používá k řízení pořadí spuštění a zastavení služeb, které jsou v systému Linux.
Umožňuje nainstalovaný systémový init skript (boot script) čtením záhlaví komentáře init skriptu a výpočtem závislostí mezi všemi skripty.
Insserv hledá systémová zařízení v konfiguračním souboru /etc/insserv.conf a adresáři /etc/insserv.conf.d.
1. init.d Formát záhlaví skriptu
Všechny skripty v adresáři /etc/init.d by měly mít záhlaví jako níže. I když jsou řádky zakomentovány (jako níže) v záhlaví každého skriptu, insserv by měl být stále schopen číst všechny tyto řádky a podle toho povolit všechny init skripty.
V následujícím příkladu řádek začínající „# Required-Start:$local_fs boot.localnet“ umožňuje insservu spustit/ověřit skripty $local_fs a boot.localnet, než bude možné spustit skript boot.kdump.
Stejným způsobem řádky „# Required-Stop:$local_fs boot.localnet“ umožňují insservu zastavit služby před provedením tohoto skriptu.
Pokud s init skripty začínáte, měli byste pochopit, jak můžete psát vlastní init skripty založené na LSB Init Standard.
# cat boot.kdump #!/bin/bash # # Copyright 2005 Red Hat, Inc. # Author: Jeff Moyer <[email protected]> ### BEGIN INIT INFO # Provides: boot.kdump # Required-Start: $local_fs boot.localnet # Should-Start: # Should-Stop: # Required-Stop: $local_fs boot.localnet # Default-Start: B # Default-Stop: # Short-Description: kdump boot configuration # Description: This script loads the kdump kernel on startup. ### END INIT INFO . /etc/sysconfig/kdump . /etc/rc.status
2. Formát souboru insserv.conf
Následuje příklad /etc/insserv.conf, což je konfigurační soubor používaný příkazem insserv.
# cat /etc/insserv.conf # All local filesystems are mounted (done during boot phase) $local_fs boot.localfs +boot.crypto # Low level networking (ethernet card) $network network # Named is operational $named +named +dnsmasq +lwresd $network # All remote filesystems are mounted (note in some cases /usr may # be remote. Most applications that care will probably require # both $local_fs and $remote_fs) $remote_fs $local_fs +nfs +smbfs # System logger is operational $syslog syslog # SunRPC portmapper available $portmap portmap # The system time has been set correctly $time boot.clock +xntpd # Services which need to be interactive <interactive> apache apache2 boot.clock boot.crypto boot.crypto-early boot.localfs boot.rootfsck kbd kdump ntp
Ve výše uvedeném konfiguračním souboru:
- $network je pseudonázev odkazující na skript /etc/init.d/network.
- Podobně uvidíte pseudonázev každého skriptu v /etc/insserv.conf. Toto jsou pseudonázvy, které budou použity v sekci záhlaví spouštěcího skriptu.
- Každý řádek, který začíná znakem $ a následujícím názvem, definuje systémové zařízení podle specifikace Linux Standard Base Specification (LSB)
- Všechna jména následovaná takovým zařízením systému budou deklarovat požadované závislosti zařízení.
- Pokud je služba s názvem za znaménkem plus dostupná, bude použita. Pokud není k dispozici, je v tichosti ignorován.
- Slova začínající jsou klíčová slova.
- V současné době je
jediným známým klíčovým slovem pro označení služby jako interaktivní, např. služba, která vyžaduje zadání přístupového hesla nebo hesla během spouštění nebo změny úrovně běhu.
3. Přidat službu
Zde je příklad, jak přidat jednoduchou službu pomocí nástroje insserv.
Nejprve ověřte, zda je spustitelný soubor v adresáři /etc/init.d.
# ls -l /etc/init.d/joystick -rwxr-xr-x 1 root root 2296 May 5 2010 /etc/init.d/joystick
Dále spusťte příkaz insserv a povolte službu joysticku.
# insserv joystick
Po výše uvedeném příkazu insserv spusťte chkconfig, abyste ověřili, že je přidán do spouštěcího seznamu.
# chkconfig --list | grep joystick joystick 0:off 1:off 2:on 3:on 4:off 5:on 6:off
Upozorňujeme, že výše uvedený příklad je velmi jednoduchý příklad bez závislostí. Ale síla insserv je tam, kde automaticky vyhodnotí a přidá všechny příslušné závislé skripty.
4. Proveďte zkušební provoz
Chcete-li provést suchý běh bez povolení jakékoli ze služeb, použijte parametr -n, jak je znázorněno níže.
# insserv –n insserv: Loading ypserv insserv: Loading /etc/insserv/overrides/ypserv insserv: Loading network insserv: Loading /etc/insserv/overrides/network insserv: Loading aaeventd insserv: Loading /etc/insserv/overrides/aaeventd insserv: Loading ntp insserv: Loading hawk insserv: Loading /etc/insserv/overrides/hawk insserv: Loading fetchmail insserv: Loading /etc/insserv/overrides/fetchmail insserv: Loading boot.cycle insserv: Loading /etc/insserv/overrides/boot.cycle insserv: Loading autoyast .. ..
5. Odebrat službu
K odstranění služby použijte volbu -r, jak je uvedeno níže.
# insserv -r joystick
Po odebrání služby ji ve výstupu chkconfig neuvidíte.
# chkconfig --list | grep joystick
6. Použít výchozí úroveň běhu
Chcete-li použít výchozí úrovně běhu definované ve skriptech, použijte volbu -d. Pokud jste upravili schéma propojení úrovně běhu, může to tyto změny obnovit.
# insserv –d
Chcete-li použít výchozí úrovně běhu definované ve skriptech, použijte volbu –d. V následujícím příkladu použije insserv úroveň běhu definovanou ve skriptu namísto spuštění skriptu z úrovně běhu definované systémem nebo uživatelem.
# insserv –d <script name> # insserv -d /etc/init.d/lighttpd # chkconfig --list | grep lighttpd lighttpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
7. Vynutit spuštění služby
Chcete-li vynutit spuštění ignorování požadované služby, použijte volbu -f, jak je uvedeno níže.
# insserv –f
Chcete-li vynutit, aby systém ignoroval ostatní požadované služby nebo závislé skripty, použijte volbu –f. V následujícím příkladu, aby byl skript /etc/init.d/openhpid spuštěn, je třeba nejprve spustit další závislosti, jako je síť, vzdálené služby ,syslog.
# more /etc/init.d/openhpid #! /bin/sh # ### BEGIN INIT INFO # Provides: openhpid # Required-Start: $network $remote_fs $syslog # Required-Stop: $network $remote_fs $syslog # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start OpenHPI daemon at boot time # Description: Enable OpenHPI service which is provided by openhpid. ### END INIT INFO
Pomocí příkazu insserv můžete vynutit spuštění skriptu /etc/init.d/openhpid ignorováním stavu síťových, vzdálených a syslog služeb:
# insserv -f /etc/init.d/openhpid
Také můžete použít volbu -v spolu s kterýmkoli z výše uvedených výstupů, abyste viděli další podrobnosti o tom, co příkaz dělá.
# insserv –dv
8. Změňte adresář skriptů
Jak vidíte ze všech předchozích příkladů, skript je standardně umístěn v adresáři /etc/init.d. Pokud chcete, aby insserv používal pro skript jiný adresář, použijte volbu -p.
Následující příklad použije jako umístění skriptu adresář /etc/init.d.custom.
# insserv –p /etc/init.d.cusom
9. Vlastní konfigurační soubor Insserv
Chcete-li zadat cestu ke konfiguračnímu souboru, použijte volbu -c. Toto se používá jak pro soubor insserv.conf, tak pro adresář insserv.conf.d.
# insserv –c <config file>
Řekněme například, že byste chtěli použít jinou cestu pro konfigurační soubor místo /etc/insserv.conf, pak můžete použít příkaz, jak je znázorněno v následujícím příkladu.
To je velmi užitečné, když chcete provést změny v souboru /etc/insserv.conf a spustit procedury suchého běhu (-n) pro účely ověření. Zálohujte původní soubor, upravte jej pomocí změn, které potřebujete, a poté přejděte na nové umístění.
Jakmile dokončíte veškeré testování, můžete spustit stejný příkaz a vrátit se k původnímu konfiguračnímu souboru nebo použít nové umístění.
# insserv -c /var/tmp/insserv_karthik.conf
10. Přepis Insserv a související soubory
Chcete-li přepsat cestu k nahrazení /etc/insserv/overrides, použijte prosím následující možnost.
Ve výchozím nastavení hlavičky komentářů LSB nacházející se ve výchozím adresáři /etc/insserv/overrides přepíší hlavičky komentářů LSB pro skripty nalezené pod adresář /etc/init.d.
Pokud však chcete zadat svůj vlastní přepisovací adresář, použijte volbu -o. Následující definuje /etc/insserv/my.overrides jako přepisovací adresář.
# insserv –o /etc/insserv/my.overrides
Chcete-li přepsat nebo nahradit záhlaví komentářů LSB novými komentáři, můžete vytvořit soubor s novými záhlavími ve specifické cestě a instruovat insserv, aby hledal nový soubor namísto hledání komentářů definovaných v původním skriptu.
V následujícím příkladu je /etc/init.d/splash skript, který má níže uvedené komentáře LSB. Tyto komentáře se používají k určení, které služby je třeba spustit nebo zastavit jako první.
# more /etc/init.d/splash #! /bin/bash # Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany. # # Author: Michael Schroeder <[email protected]> # # /etc/init.d/splash # /usr/sbin/rcsplash # # System startup script for console splash screens # ### BEGIN INIT INFO # Provides: splash # Required-Start: $remote_fs # Should-Start: fbset # Required-Stop: $remote_fs # Should-Stop: fbset # Default-Start: 1 2 3 5 S # Default-Stop: # Description: Splash screen setup ### END INIT INFO
Pokud nechcete používat výše uvedené komentáře LSB a také si nepřejete upravovat stávající skript, můžete soubor zkopírovat do adresáře /etc/insserv/overrides a spustit níže uvedený příkaz insserv, abyste systému řekli, aby použil definovaný skript v přepisovacím adresáři,
insserv -o splash
Nemusíte zadávat umístění přepisovacího adresáře, protože výchozí cesta je /etc/insserv/overrides. Můžete také spustit insserv dry-run (-n), abyste ověřili, jak se skript spouští.
Následující jsou různé soubory, které budou zpracovány příkazem insserv:
- /etc/insserv.conf – Konfigurační soubor pro insserv, který definuje systémová zařízení LSB.
- /etc/insserv.conf.d/ – Adresář pro další konfigurační soubory pro deklaraci systémových zařízení LSB.
- /etc/insserv/overrides/ – Cesta k nahrazení stávajících záhlaví komentářů LSB záhlavími komentářů nalezenými v této cestě.
- /etc/init.d/ – Cesta k základnímu adresáři skriptu SuSE init, jak to vyžaduje specifikace Linux Standard Base Specification (LSB)