Dans un scénario typique, pendant le processus de démarrage, les scripts de démarrage du système au niveau de l'exécution sont exécutés un par un.
Un script de démarrage de niveau d'exécution particulier ne s'exécutera pas tant que le script précédent n'aura pas été complètement exécuté. Si un service particulier au démarrage se bloque pour une raison quelconque, il peut s'écouler un certain temps avant qu'il n'expire et passe au script de démarrage suivant.
L'utilitaire Startpar est utilisé pour exécuter plusieurs scripts de niveau d'exécution en parallèle. Cela permet d'accélérer le processus de démarrage de votre serveur.
L'utilitaire Startpar fait partie du package sysvinit.
La syntaxe générale du startpar est donnée ci-dessous :
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
Voici les différentes options de startpar :
- -p Nombre de processus à exécuter en parallèle.
- -i Modifier le facteur de pondération du bloc de processus. La valeur par défaut est 800.
- -t Timeout pour vider le tampon d'un script si aucune sortie ne s'est produite.
- -T Délai d'attente global. Il est utilisé pour vider la sortie du tampon des scripts précédents .
- -a Arguments à fournir à tous les scripts.
- -M Bascule startpar en mode "make".
- -P Spécifier le niveau d'exécution précédent
- -N Spécifier le niveau d'exécution suivant
Lorsque startpar exécute les scripts de niveau d'exécution, la sortie des scripts est mise en mémoire tampon pour permettre une écriture contrôlée dans les fonctions de journalisation.
Si d'autres scripts s'exécutent en parallèle, il attend que la journalisation soit terminée, puis il écrit les données du tampon dans la zone de journalisation. Les options –t et –T sont utilisées pour contrôler l'effacement de ces tampons en fonction du temps écoulé depuis la dernière sortie capturée dans le tampon.
Sur mon système, j'ai la version suivante pour startpar :
# startpar -v startpar version 0.54
La commande Startpar peut être utilisée en mode « make » à l'aide de l'option –M. Dans ce mode, startpar utilise les fichiers suivants pour décider comment exécuter les scripts de démarrage.
/etc/init.d/.depend.start
/etc/init.d/.depend.stop
/etc/init.d/.depend.boot
Voici un exemple de fichier .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
En mode "make", startpar utilise le fichier .depend.start pour trouver quels services dépendants doivent être démarrés afin de commencer à démarrer un service spécifique.
Dans la sortie ci-dessus, lorsque startpar est exécuté avec le mode de démarrage à l'aide de l'option make, les scripts dépendants sont démarrés en premier avant que les scripts ne soient exécutés en parallèle.
Voici un exemple d'utilisation de startpar en mode make pendant la séquence de démarrage du système,
# 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"
Dans l'exemple ci-dessus, startpar est exécuté avec le nombre total de 4 processus à exécuter en parallèle avec un délai d'attente de 20 secondes, un délai d'attente global de 3 secondes pour vider la zone tampon, -M en mode make avec l'option "start" pour indiquer que le démarrage est utilisé dans la séquence de démarrage.
Cela utilisera /etc/init.d/.depend. fichier de démarrage pour vérifier les scripts qui dépendent les uns des autres. –P est le niveau d'exécution précédent –N est le nouveau niveau d'exécution.
Voici un autre exemple pour utiliser startpar juste pour exécuter 2 scripts en parallèle, vous pouvez également définir ce script sur /etc/init.d/rc pour vous assurer que ces scripts démarrent en parallèle lors du démarrage du système si nécessaire.
# startpar -p 4 -t 20 -T 3 -a start /etc/init.d/ypxfrd /etc/init.d/drbd Starting rpc.ypxfrd done Starting DRBD resources: . .
Également dans certaines distributions Linux, vous pouvez configurer le système pour utiliser l'option startpar dans le fichier /etc/init.d/rc.
Dans le fichier rc, changez simplement la valeur "CONCURRENCY=SHELL" en "CONCURRENCY=STARTPAR", qui devrait calculer automatiquement les dépendances et démarrer les scripts applicables en parallèle.
# vi /etc/init.d/rc CONCURRENCY=STARTPAR