V typickém scénáři se během zaváděcího procesu spouštěcí skripty na úrovni běhu systému spouštějí jeden po druhém.
Spouštěcí skript konkrétní úrovně spuštění se nespustí, dokud nebude úplně proveden předchozí skript. Pokud určitá služba během spouštění z nějakého důvodu visí, může chvíli trvat, než vyprší časový limit a přejde k dalšímu spouštěcímu skriptu.
Obslužný program Startpar se používá k paralelnímu spouštění více skriptů na úrovni běhu. To pomáhá urychlit proces spouštění vašeho serveru.
Utilita Startpar je součástí balíčku sysvinit.
Obecná syntaxe pro startpar je uvedena níže:
startpar –p par –i iorate –t timeout –T global timeout –a arg prg1 prg2 startpar –p par –I iorate –t timeout –T global timeout –M boot|start|stop
Následují různé možnosti startpar:
- -p Počet paralelně spuštěných procesů.
- -i Změňte faktor vážení bloku procesu. Výchozí hodnota je 800.
- -t Časový limit pro vyprázdnění vyrovnávací paměti skriptu, pokud nedošlo k žádnému výstupu.
- -T Globální časový limit. Používá se k vyprázdnění výstupu z vyrovnávací paměti předchozích skriptů.
- -a Argumenty, které mají být poskytnuty všem skriptům.
- -M Přepněte startpar do režimu „make“.
- -P Určuje předchozí úroveň spuštění
- -N Určete další úroveň spuštění
Když startpar spouští skripty na úrovni běhu, výstup skriptů se ukládá do vyrovnávací paměti, aby bylo možné řízený zápis do protokolovacích zařízení.
Pokud paralelně běží další skripty, pak čeká na dokončení logování a poté zapisuje data z bufferu do logovací oblasti. Volby –t a –T se používají k řízení mazání těchto vyrovnávacích pamětí v závislosti na době od posledního výstupu zachyceného do vyrovnávací paměti.
V mém systému mám následující verzi pro startpar:
# startpar -v startpar version 0.54
Příkaz Startpar lze použít v režimu „make“ pomocí volby –M. V tomto režimu startpar používá následující soubory k rozhodnutí, jak spustit spouštěcí skripty.
/etc/init.d/.depend.start
/etc/init.d/.depend.stop
/etc/init.d/.depend.boot
Zde je příklad souboru .depend.start:
# cat /etc/init.d/.depend.start TARGETS = halt fbset lvm_wait_merge_snapshot microcode.ctl earlysyslog dbus acpid random purge-kernels reboot network haldaemon boot.clock syslog ford_tso_off Sts splash_early haveged rpcbind multipathd nfs smbfs kbd irq_balancer alsasound mcelog network-remotefs sshd java.binfmt_misc clamd logd gpm ntp single atd clamav-milter canna amavis cups nscd postfix xdm cron smartd INTERACTIVE = kbd ntp single network: dbus haldaemon: dbus acpid syslog: network earlysyslog ford_tso_off: network Sts: network splash_early: syslog haveged: syslog random rpcbind: syslog multipathd: syslog nfs: rpcbind . . . . mcelog: smbfs network-remotefs: smbfs haldaemon
V režimu „make“ startpar používá soubor .depend.start ke zjištění, které závislé služby je třeba spustit, aby bylo možné spustit konkrétní službu.
Ve výše uvedeném výstupu, když je startpar spuštěn v režimu start pomocí volby make, jsou závislé skripty spuštěny jako první, než jsou skripty spuštěny paralelně.
Zde je příklad, jak lze startpar použít v režimu make během spouštěcí sekvence systému,
# startpar -p 4 -t 20 -T 3 -M start -P N -R 2 D-Bus already started. Not starting. Starting acpid done Re-Starting syslog services done Starting service at daemon done Starting sound driver done Starting cupsd done Starting CRON daemon/usr/sbin/cron: can't lock /var/run/cron.pid, otherpid may be 3506: Resource temporarily unavailable startproc: exit status of parent of /usr/sbin/cron: 1 done Starting irqbalance unused HAL already started. Not starting. Starting mcelog... already running done Setting up network interfaces: eth0 device: Intel Corporation 82545EM Gigabit Ethernet Co eth0 IP address: 19.86.xxx.xxx/24 done eth1 device: Intel Corporation 82545EM Gigabit Ethernet Co eth1 IP address: 19.86.xxx.xxx/24 done Setting up service network . . . . . . . . . . done Hint: you may set mandatory devices in /etc/sysconfig/network/config Setting up (remotefs) network interfaces: Setting up service (remotefs) network . . . . . . . . . . done Initializing random number generator done Starting smartd unused Disabling TSO on all interfaces and adding ETHTOOL_OPTIONS to nic config files done Re-Starting syslog services done Starting haveged daemon done failed_service="alsasound" skipped_service="irq_balancer smartd"
Ve výše uvedeném příkladu je spuštěn startpar s celkovým počtem 4 paralelně spuštěných procesů s časovým limitem 20 sekund, globálním časovým limitem 3 sekundy pro vyprázdnění oblasti vyrovnávací paměti, -M v režimu make s možností „start“ k označení spuštění. se používá ve startovní sekvenci.
To bude používat /etc/init.d/.depend. start file pro ověření skriptů, které jsou na sobě závislé. –P je předchozí úroveň běhu –N je nová úroveň běhu.
Zde je další příklad použití startpar pouze k paralelnímu spouštění 2 skriptů. Tento skript můžete také definovat na /etc/init.d/rc, abyste zajistili, že se tyto skripty v případě potřeby spouštějí paralelně během spouštění systému.
# startpar -p 4 -t 20 -T 3 -a start /etc/init.d/ypxfrd /etc/init.d/drbd Starting rpc.ypxfrd done Starting DRBD resources: . .
Také v některých distribucích Linuxu můžete nastavit systém tak, aby používal volbu startpar v souboru /etc/init.d/rc.
V souboru rc stačí změnit hodnotu „CONCURRENCY=SHELL“ na „CONCURRENCY=STARTPAR“, což by mělo automaticky vypočítat závislosti a spustit příslušné skripty paralelně.
# vi /etc/init.d/rc CONCURRENCY=STARTPAR