Búsqueda de sitios web

Serie RHCSA: Gestión de procesos en RHEL 7: arranque, apagado y todo lo demás – Parte 5


Comenzaremos este artículo con una revisión general y breve de lo que sucede desde el momento en que presiona el botón Encendido para encender su servidor RHEL 7 hasta que se le presenta el inicio de sesión. pantalla en una interfaz de línea de comando.

Tenga en cuenta que:

1. los mismos principios básicos se aplican, quizás con modificaciones menores, también a otras distribuciones de Linux, y
2. la siguiente descripción no pretende representar una explicación exhaustiva del proceso de arranque, sino sólo los fundamentos.

Proceso de arranque de Linux

1. La POST (autoprueba de encendido) se inicializa y realiza comprobaciones de hardware.

2. Cuando finaliza la POST, el control del sistema pasa al cargador de arranque de primera etapa, que se almacena en el sector de arranque de uno de los discos duros (para versiones más antiguas). sistemas que utilizan BIOS y MBR) o una partición (U)EFI dedicada.

3. El cargador de arranque de primera etapa luego carga el cargador de arranque de segunda etapa, generalmente GRUB (GRand Unified Boot Loader), que reside dentro de /boot, que a su vez carga el kernel y el sistema de archivos inicial basado en RAM (también conocido como initramfs, que contiene programas y archivos binarios que realizan las acciones necesarias para, en última instancia, montar el sistema de archivos raíz real).

4. Se nos presenta una pantalla de presentación que nos permite elegir un sistema operativo y un kernel para arrancar:

5. El kernel configura el hardware conectado al sistema y una vez que se ha montado el sistema de archivos raíz, inicia el proceso con PID 1, que a su vez inicializará otros procesos y presentará nosotros con un mensaje de inicio de sesión.

Nota: Si deseamos hacerlo más adelante, podemos examinar los detalles de este proceso usando el comando dmesg y filtrando su salida usando las herramientas que lo he explicado en artículos anteriores de esta serie.

En el ejemplo anterior, utilizamos el conocido comando ps para mostrar una lista de procesos actuales cuyo proceso principal (o en otras palabras, el proceso que los inició) es systemd . (el administrador de sistemas y servicios al que han cambiado la mayoría de las distribuciones modernas de Linux) durante el inicio del sistema:

ps -o ppid,pid,uname,comm --ppid=1

Recuerde que el indicador -o (abreviatura de –format) le permite presentar la salida de ps en un formato personalizado que se adapte a sus necesidades usando las palabras clave especificadas en la sección ESPECIFICADORES DE FORMATO ESTÁNDAR en man ps.

Otro caso en el que querrás definir la salida de ps en lugar de usar el valor predeterminado es cuando necesitas encontrar procesos que están causando una carga significativa de CPU y/o memoria, y ordenarlos en consecuencia:

ps aux --sort=+pcpu              # Sort by %CPU (ascending)
ps aux --sort=-pcpu              # Sort by %CPU (descending)
ps aux --sort=+pmem              # Sort by %MEM (ascending)
ps aux --sort=-pmem              # Sort by %MEM (descending)
ps aux --sort=+pcpu,-pmem        # Combine sort by %CPU (ascending) and %MEM (descending)

Una introducción a SystemD

Pocas decisiones en el mundo Linux han causado más controversias que la adopción de systemd por parte de las principales distribuciones de Linux. Los defensores de Systemd mencionan como sus principales ventajas los siguientes hechos:

Lea también: La historia detrás de 'init' y 'systemd'

1. Systemd permite realizar más procesamiento en paralelo durante el inicio del sistema (a diferencia del antiguo SysVinit, que siempre tiende a ser más lento porque inicia los procesos uno por uno, comprueba si uno depende de otro y luego espera a que se inicien los demonios para que puedan iniciarse más servicios), y

2. Funciona como una gestión dinámica de recursos en un sistema en ejecución. Por lo tanto, los servicios se inician cuando son necesarios (para evitar consumir recursos del sistema si no se utilizan) en lugar de iniciarse sin una razón válida durante el arranque.

3. Compatibilidad con versiones anteriores de los scripts SysVinit.

Systemd está controlado por la utilidad systemctl. Si proviene de SysVinit, es probable que esté familiarizado con:

  1. la herramienta servicio, que -en aquellos sistemas más antiguos- se utilizaba para gestionar los scripts SysVinit, y
  2. la utilidad chkconfig, que sirvió para actualizar y consultar información de nivel de ejecución para los servicios del sistema.
  3. apagar, que debe haber utilizado varias veces para reiniciar o detener un sistema en ejecución.

La siguiente tabla muestra las similitudes entre el uso de estas herramientas heredadas y systemctl:

Legacy tool Systemctl equivalent Description
service name start systemctl start name Start name (where name is a service)
service name stop systemctl stop name Stop name
service name condrestart systemctl try-restart name Restarts name (if it’s already running)
service name restart systemctl restart name Restarts name
service name reload systemctl reload name Reloads the configuration for name
service name status systemctl status name Displays the current status of name
service –status-all systemctl Displays the status of all current services
chkconfig name on systemctl enable name Enable name to run on startup as specified in the unit file (the file to which the symlink points). The process of enabling or disabling a service to start automatically on boot consists in adding or removing symbolic links inside the /etc/systemd/system directory.
chkconfig name off systemctl disable name Disables name to run on startup as specified in the unit file (the file to which the symlink points)
chkconfig –list name systemctl is-enabled name Verify whether name (a specific service) is currently enabled
chkconfig –list systemctl –type=service Displays all services and tells whether they are enabled or disabled
shutdown -h now systemctl poweroff Power-off the machine (halt)
shutdown -r now systemctl reboot Reboot the system

Systemd también introdujo los conceptos de unidades (que pueden ser un servicio, un punto de montaje, un dispositivo o un socket de red) y objetivos (que es como systemd logra iniciar varios procesos relacionados al mismo tiempo). tiempo, y pueden considerarse -aunque no iguales- como el equivalente de los niveles de ejecución en sistemas basados en SysVinit.

Resumiendo

Otras tareas relacionadas con la gestión de procesos incluyen, entre otras, la capacidad de:

1. Ajustar la prioridad de ejecución en cuanto al uso de recursos del sistema de un proceso:

Esto se logra mediante la utilidad renice, que altera la prioridad de programación de uno o más procesos en ejecución. En términos simples, la prioridad de programación es una característica que permite al kernel (presente en las versiones => 2.6) asignar recursos del sistema según la prioridad de ejecución asignada (también conocida como amabilidad, en un rango de -20 a 19) de un proceso determinado.

La sintaxis básica de renice es la siguiente:

renice [-n] priority [-gpu] identifier

En el comando genérico anterior, el primer argumento es el valor de prioridad que se utilizará, mientras que el otro argumento se puede interpretar como ID de proceso (que es la configuración predeterminada), ID de grupo de proceso, ID de usuario o nombres de usuario. Un usuario normal (que no sea root) sólo puede modificar la prioridad de programación de un proceso de su propiedad y sólo aumentar el nivel de amabilidad (lo que significa consumir menos recursos del sistema).

2. Matar (o interrumpir la ejecución normal) de un proceso según sea necesario:

En términos más precisos, matar un proceso da derecho a enviarle una señal para finalizar su ejecución correctamente (SIGTERM=15) o inmediatamente (SIGKILL=9) a través de kill o pkill. comandos.

La diferencia entre estas dos herramientas es que la primera se utiliza para finalizar un proceso específico o un grupo de procesos por completo, mientras que la segunda le permite hacer lo mismo según el nombre y otros atributos.

Además, pkill viene incluido con pgrep, que muestra los PID que se verán afectados si se utiliza pkill. Por ejemplo, antes de ejecutar:

pkill -u gacanepa

Puede resultar útil ver de un vistazo cuáles son los PID propiedad de gacanepa:

pgrep -l -u gacanepa

De forma predeterminada, tanto kill como pkill envían la señal SIGTERM al proceso. Como mencionamos anteriormente, esta señal se puede ignorar (mientras el proceso finaliza su ejecución o para siempre), por lo que cuando realmente necesite detener un proceso en ejecución por un motivo válido, deberá especificar el SIGKILL . señal en la línea de comando:

kill -9 identifier               # Kill a process or a process group
kill -s SIGNAL identifier        # Idem
pkill -s SIGNAL identifier       # Kill a process by name or other attributes 

Conclusión

En este artículo hemos explicado los conceptos básicos del proceso de arranque en un sistema RHEL 7 y analizado algunas de las herramientas que están disponibles para ayudarle a gestionar procesos utilizando utilidades comunes. y comandos específicos del sistema.

Tenga en cuenta que esta lista no pretende cubrir todos los detalles de este tema, así que siéntase libre de agregar sus propias herramientas y comandos preferidos a este artículo utilizando el formulario de comentarios a continuación. También son bienvenidos preguntas y otros comentarios.