it-swarm-eu.dev

Jak mohu vytvořit skript v /etc/init.d, který začíná při spuštění?

Myslím, že jsem si o tom něco přečetl, ale nemohu si vzpomenout, jak se to dělá. V podstatě mám službu v /etc/init.d které bych chtěl spustit automaticky při spuštění. Pamatuji si, že to má něco společného se symlinking skriptem do /etc/rc.d adresář, ale v současnosti si nepamatuji. Jaký je na to příkaz?

Věřím, že jsem na derivátu Fedora/CentOS.

87
Naftuli Kay

Pokud jste na systému založeném na Red Hat, jak jste zmínil, můžete udělat následující:

  1. Vytvořte skript a umístěte jej do /etc/init.d (např. /etc/init.d/myscript). Skript by měl mít následující formát:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

Formát je dost standardní a stávající skripty si můžete prohlédnout v /etc/init.d. Potom můžete použít skript takto /etc/init.d/myscript start nebo chkconfig myscript start. Manuální stránka ckconfig vysvětluje záhlaví skriptu:

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

Příklad start, stop a stavový kód používá pomocné funkce definované v /etc/init.d/functions

  1. Povolte skript

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. Zkontrolujte, zda je skript skutečně povolený - u vybraných úrovní byste měli vidět „on“.

    $ chkconfig --list | grep myscript
    
115
canen

Vyzkoušíte, do jaké úrovně běhu se váš počítač obvykle dostane.

runlevel

Často se jedná o 5 nebo 2 - existují různé konvence, ale nic se nepodařilo, afaik. Ubuntu používá 2, zatímco dřívější distribuce, kterou jsem používal, vždy používal

  • 1 Jeden uživatel (super uživatel)
  • 2 více uživatelů
  • 3 více uživatelů + síť
  • 4 nepoužito/uživatelem definovatelné
  • 5 více uživatelů, síť + X11

Pak z vašeho init-skriptu uděláte symbolický odkaz, možná /etc/init.d/foobar to /etc/rc2.d/SXYfoobar

S znamená 'Spusťte tento skript v tomto runlevelu (zde: 2). XY je dvoumístné desetinné číslo, které je relevantní pro posloupnost, spouštění skriptů.

Pokud závisíte na tom, že před vámi bude spuštěn skript S45barfoo, a S55foofoo závisí na vašem skriptu, zvolte xy mezi 45 a 55. Pro stejná čísla není pořadí bootování definováno.

Ubuntu se mezitím přepnul (přepíná) na jinou spouštěcí proceduru nazvanou upstart.

A poznámka: Ne vždy odkazy odkazují na /etc/rcX.d - někdy je to /etc/init/rcX.d nebo něco podobného, ​​ale mělo by být snadné je najít někde pod/atd.

Pokud chcete něco spustit na konci počátečních skriptů, /etc/rc.local by byl hledaný soubor, ale pokud to záleží na již spuštěném systému X11, můžete hledat možnost automatického spuštění vašeho desktopového prostředí, nebo /etc/X11/Xsession.d/ s podobným vzorem, jak je popsáno výše.

Pokud záleží na existující síti, existuje samostatný adresář (if-up.d) a pro připojená zařízení, jako jsou externí jednotky USB /etc/udev/rules.d/.

10
user unknown

Jak se Naftuli Tzvi Kay zeptal na Debian výše: Počínaje Debianem 6 by váš skript měl obsahovat záhlaví LSB (Linux Standards Base), které uvádí jeho závislosti a schopnosti ( viz debianová wiki stránka ).

Je-li k dispozici záhlaví LSB, můžete pomocí skriptu insserv zahrnout skript do spouštěcího procesu ( viz další stránka debian wiki ).

3
mdt