En un escenario típico, durante el proceso de inicio, los scripts de inicio del sistema de nivel de ejecución se ejecutan uno por uno.
Una secuencia de comandos de inicio de nivel de ejecución en particular no se ejecutará hasta que la secuencia de comandos anterior se ejecute por completo. Si un servicio en particular durante el inicio se bloquea por algún motivo, puede pasar un tiempo antes de que se agote el tiempo de espera y pase a la siguiente secuencia de comandos de inicio.
La utilidad Startpar se utiliza para ejecutar varios scripts de nivel de ejecución en paralelo. Esto ayuda a acelerar el proceso de arranque de su servidor.
La utilidad Startpar es parte del paquete sysvinit.
La sintaxis general para el startpar se da a continuación:
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
Las siguientes son las diversas opciones de startpar:
- -p Número de procesos a ejecutar en paralelo.
- -i Cambia el factor de ponderación del bloque de proceso. El valor predeterminado es 800.
- -t Tiempo de espera para vaciar el búfer de un script si no se ha producido ningún resultado.
- -T Tiempo de espera global. Se utiliza para vaciar la salida del búfer de scripts anteriores.
- -a Argumentos que se proporcionarán a todos los scripts.
- -M Cambia startpar al modo "hacer".
- -P Especificar el nivel de ejecución anterior
- -N Especificar el siguiente nivel de ejecución
Cuando startpar está ejecutando los scripts de nivel de ejecución, la salida de los scripts se almacena en búfer para permitir la escritura controlada en las instalaciones de registro.
Si otros scripts se ejecutan en paralelo, espera a que se complete el registro y luego escribe los datos del búfer en el área de registro. Las opciones –t y –T se utilizan para controlar la limpieza de estos búferes según el tiempo transcurrido desde la última salida que se capturó en el búfer.
En mi sistema, tengo la siguiente versión para startpar:
# startpar -v startpar version 0.54
El comando Startpar se puede usar en un modo "hacer" usando la opción -M. En este modo, startpar usa los siguientes archivos para decidir cómo ejecutar los scripts de inicio.
/etc/init.d/.depend.start
/etc/init.d/.depend.stop
/etc/init.d/.depend.boot
Aquí hay un ejemplo de archivo .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 el modo "hacer", startpar usa el archivo .depend.start para encontrar qué servicios dependientes deben iniciarse para comenzar a iniciar un servicio específico.
En la salida anterior, cuando startpar se ejecuta con el modo de inicio usando la opción make, los scripts dependientes se inician primero antes de que los scripts se ejecuten en paralelo.
Aquí hay un ejemplo de cómo se puede usar startpar en el modo de creación durante la secuencia de inicio del sistema,
# 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"
En el ejemplo anterior, startpar se ejecuta con el número total de 4 procesos para ejecutarse en paralelo con un tiempo de espera de 20 segundos, tiempo de espera global de 3 segundos para vaciar el área del búfer, -M en modo hacer con la opción "iniciar" para indicar que el inicio es siendo utilizado en la secuencia de inicio.
Esto usará /etc/init.d/.depend. archivo de inicio para verificar los scripts que dependen unos de otros. –P es el nivel de ejecución anterior –N es el nuevo nivel de ejecución.
Aquí hay otro ejemplo para usar startpar solo para ejecutar 2 scripts en paralelo, también puede definir este script en /etc/init.d/rc para asegurarse de que estos scripts se inicien en paralelo durante el inicio del sistema si es necesario.
# startpar -p 4 -t 20 -T 3 -a start /etc/init.d/ypxfrd /etc/init.d/drbd Starting rpc.ypxfrd done Starting DRBD resources: . .
También en algunas distribuciones de Linux, puede configurar el sistema para usar la opción startpar en el archivo /etc/init.d/rc.
En el archivo rc, simplemente cambie el valor "CONCURRENCY=SHELL" a "CONCURRENCY=STARTPAR", que debería calcular las dependencias automáticamente e iniciar los scripts aplicables en paralelo.
# vi /etc/init.d/rc CONCURRENCY=STARTPAR