典型的なシナリオでは、起動プロセス中に、ランレベル システム起動スクリプトが 1 つずつ実行されます。
特定の実行レベルの起動スクリプトは、前のスクリプトが完全に実行されるまで実行されません。起動中に特定のサービスが何らかの理由でハングした場合、タイムアウトして次の起動スクリプトに移るまでに時間がかかる場合があります。
Startpar ユーティリティは、複数の実行レベル スクリプトを並行して実行するために使用されます。これにより、サーバーの起動プロセスが高速化されます。
Startpar ユーティリティは sysvinit パッケージの一部です。
startpar の一般的な構文は次のとおりです。
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
以下は、startpar のさまざまなオプションです:
- -p 並行して実行するプロセスの数
- -i プロセス ブロックの重み係数を変更します。デフォルトは 800 です。
- -t 出力が発生しなかった場合にスクリプトのバッファを空にするためのタイムアウト。
- -T グローバル タイムアウト。以前のスクリプトのバッファ出力をフラッシュするために使用されます。
- -a すべてのスクリプトに提供される引数
- -M startpar を「make」モードに切り替えます。
- -P 以前のランレベルを指定
- -N 次のランレベルを指定
startpar が実行レベル スクリプトを実行している場合、スクリプトの出力はバッファリングされ、ロギング機能への制御された書き込みが可能になります。
他のスクリプトが並行して実行されている場合は、ロギングが完了するのを待ってから、バッファからロギング領域にデータを書き込みます。 –t および –T オプションは、最後の出力がバッファにキャプチャされてからの時間に応じて、これらのバッファのクリアを制御するために使用されます。
私のシステムでは、次のバージョンの startpar があります:
# startpar -v startpar version 0.54
Startpar コマンドは、–M オプションを使用して「make」モードで使用できます。このモードでは、startpar は次のファイルを使用して、起動スクリプトの実行方法を決定します。
/etc/init.d/.depend.start
/etc/init.d/.depend.stop
/etc/init.d/.depend.boot
以下は .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
「make」モードでは、startpar は .depend.start ファイルを使用して、特定のサービスを開始するために開始する必要がある依存サービスを見つけます。
上記の出力では、startpar が make オプションを使用して開始モードで実行されると、依存スクリプトが最初に開始されてから、スクリプトが並列実行されます。
以下は、システム起動シーケンス中に make モードで startpar を使用する方法の例です。
# 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"
上記の例では、timeout 20 秒、global timeout 3 秒でバッファ領域を空にし、make モードで「start」オプションを指定して起動を示す -M で並列に実行する合計 4 つのプロセスで startpar が実行されます。開始シーケンスで使用されています。
これは /etc/init.d/.depend を使用します。 start ファイルを使用して、相互に依存しているスクリプトを確認します。 –P は以前のランレベルです –N は新しいランレベルです。
2 つのスクリプトを並行して実行するためだけに startpar を使用する別の例を次に示します。このスクリプトを /etc/init.d/rc で定義して、必要に応じてシステムの起動時にこれらのスクリプトが並行して開始されるようにすることもできます。
# startpar -p 4 -t 20 -T 3 -a start /etc/init.d/ypxfrd /etc/init.d/drbd Starting rpc.ypxfrd done Starting DRBD resources: . .
また、一部の Linux ディストリビューションでは、/etc/init.d/rc ファイルで startpar オプションを使用するようにシステムをセットアップできます。
rc ファイルで、値「CONCURRENCY=SHELL」を「CONCURRENCY=STARTPAR」に変更するだけで、依存関係が自動的に計算され、該当するスクリプトが並行して開始されます。
# vi /etc/init.d/rc CONCURRENCY=STARTPAR