Tutorial de introducción a Systemd: Parte práctica

< Systemd 入门教程:命令篇

Tutorial de introducción a Systemd: Parte práctica

Autor: Ruan Yifeng

Fecha: 8 de marzo de 2016

En el artículo anterior, presenté Systemd. Comando principal Hoy voy a presentar cómo usarlo para completar algunas tareas básicas. bg2016030801

Uno. Encendido de la máquina.

Para el software que es compatible con Systemd, durante la instalación, se configurará automáticamente en /usr/lib/systemd/system Agrega un archivo de configuración al directorio. Si deseas que este software se inicie al arrancar, ejecuta el siguiente comando (para httpd.service por ejemplo).

El comando anterior es equivalente a en. /etc/systemd/system Agregar un enlace simbólico al directorio que apunte a /usr/lib/systemd/system dentro de httpd.service Documento. Esto es porque al encender, Systemd Solo ejecutar. /etc/systemd/system El archivo de configuración en el directorio. Esto también significa que si se coloca el archivo de configuración modificado en ese directorio, se puede lograr el efecto de sobrescribir la configuración original.

Dos, iniciar el servicio.

Después de configurar el inicio automático, el software no se iniciará de inmediato, sino que deberá esperar al próximo arranque. Si desea ejecutar el software ahora, debe ejecutar systemctl start comando. Después de configurar el inicio automático, el software no se iniciará de inmediato, sino que deberá esperar hasta el próximo arranque. Si desea ejecutar el software ahora, debe ejecutar systemctl start Orden.

Después de ejecutar el comando anterior, puede que el inicio falle, por lo que se debe usar. systemctl status Ordene verificar el estado de este servicio.

El significado del resultado anterior es el siguiente.

Loaded: la ubicación del archivo de configuración, si se debe configurar para que inicie al encender. La línea activa: indica que está en funcionamiento. Línea Main PID: ID del proceso principal Estado: el estado actual del software proporcionado por la aplicación misma (en este caso, httpd). Bloque CGroup: todos los subprocesos de la aplicación. Bloque de registro: registros de la aplicación

Tres, detener el servicio.

Para detener el servicio en ejecución, es necesario ejecutar. systemctl stop Orden.

有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出 kill Señal.

Además, se debe ejecutar el reinicio del servicio. systemctl restart Orden.

Cuatro, entender el archivo de configuración.

El inicio de un servicio depende completamente de su archivo de configuración. A continuación, veamos qué contenido tiene el archivo de configuración.

Como se mencionó anteriormente, los archivos de configuración se colocan principalmente en /usr/lib/systemd/system Índice, también puede estar en /etc/systemd/system Índice. Una vez que encuentres el archivo de configuración, simplemente ábrelo con un editor de texto. systemctl cat El comando se puede utilizar para ver el archivo de configuración, a continuación se muestra. sshd.service El archivo es un ejemplo, su función es iniciar un servidor SSH para que otros usuarios puedan iniciar sesión de forma SSH.

Se puede ver que el archivo de configuración se divide en varios bloques, cada uno de los cuales contiene varias pares de clave y valor.

A continuación, se explicará el contenido de cada bloque.

Cinco, [Unidad] Bloque: Orden de inicio y dependencias.

Unit del bloque Description El campo proporciona una descripción simple del servicio actual. Documentation El campo proporciona la ubicación del documento. La configuración siguiente es el orden de inicio y las dependencias, lo cual es bastante importante.

After Campo: indica si network.target o sshd-keygen.service Necesita ser activado, entonces. sshd.service Debería iniciarse después de ellos.

Correspondientemente, hay uno más. Before campo, definición sshd.service ¿En qué servicios debería iniciarse primero? Nota, After y Before El campo solo se refiere al orden de inicio, sin involucrar relaciones de dependencia.

Por ejemplo, una aplicación web necesita una base de datos PostgreSQL para almacenar datos. En el archivo de configuración, solo se define que debe iniciarse después de PostgreSQL, pero no se define que dependa de PostgreSQL. Después de su implementación, por alguna razón, PostgreSQL necesita reiniciarse, y durante el tiempo que el servicio está detenido, la aplicación web no podrá establecer una conexión con la base de datos. Para establecer la relación de dependencia, es necesario usar. Wants campo y Requires Campo.

Wants Campo: representa sshd.service y sshd-keygen.service 之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响 sshd.service Continuar ejecutando.

Requires 字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么 sshd.service También debe salir.

Atención, Wants campo y Requires El campo solo implica relaciones de dependencia y no está relacionado con el orden de inicio; por defecto, se inician simultáneamente.

Sección seis: [Servicio] Bloque: Comportamiento de inicio

Service ¿Cómo se define el bloque para iniciar el servicio actual?

6.1 Comando de inicio

Muchos programas tienen su propio archivo de parámetros de entorno, que se puede usar para EnvironmentFile Lectura de campo.

EnvironmentFile Campo: Especifica el archivo de parámetros del entorno actual del servicio. Dentro de este archivo, key=value par de clave-valor, se puede usar $key en la forma, se obtiene en el archivo de configuración actual.

En el ejemplo anterior, el archivo de parámetros de entorno de sshd es /etc/sysconfig/sshd El campo más importante en el archivo de configuración es ExecStart

ExecStart Campo: Define el comando que se ejecuta al iniciar el proceso.

En el ejemplo anterior, iniciar. sshd El comando ejecutado es /usr/sbin/sshd -D $OPTIONS entre los cuales están las variables $OPTIONS proviene de EnvironmentFile Archivo de parámetros de entorno especificado por el campo. También hay otros campos que tienen una función similar.

ExecReload Campo: Comando ejecutado al reiniciar el servicio.

ExecStop Campo: Comando a ejecutar al detener el servicio.

ExecStartPre Campo: Comandos que se ejecutan antes de iniciar el servicio.

ExecStartPost Campo: Comando que se ejecuta después de iniciar el servicio.

ExecStopPost Campo: Comandos a ejecutar después de detener el servicio.

Por favor, mira el siguiente ejemplo.

En el archivo de configuración anterior, la segunda línea. ExecStart Se establece como valor nulo, lo que significa que se canceló la configuración de la primera fila, y el resultado de la ejecución es el siguiente.

Antes de todas las configuraciones de inicio, se puede agregar un guion. - ),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如, EnvironmentFile=-/etc/sysconfig/sshd (Nota el guion después del signo igual), significa que incluso. /etc/sysconfig/sshd El archivo no existe y no se generará ningún error.

6.2 Tipo de inicio

Type Definición del campo tipo de inicio. Los valores que se pueden establecer son los siguientes.

simple (valor predeterminado): ExecStart El proceso de inicio del campo es el proceso principal.

forking: ExecStart El campo será de fork() Se iniciará de esta manera, en este momento el proceso padre saldrá y el proceso hijo se convertirá en el proceso principal.

oneshot: similar a simple pero solo se ejecuta una vez, Systemd esperará a que termine antes de iniciar otros servicios.

dbus: similar a simple pero se iniciará después de esperar la señal D-Bus

notificar: similar a simple Después de que se complete el arranque, se enviará una señal de notificación, y luego Systemd iniciará otros servicios.

idle: similar a simple Sin embargo, hay que esperar a que se completen otras tareas antes de iniciar este servicio. Una de las situaciones en las que se utiliza es para que la salida de este servicio no se mezcle con la salida de otros servicios.

En el archivo de configuración anterior, establezca el tipo de inicio como oneshot Esto indica que este servicio solo necesita ejecutarse una vez, no requiere funcionar a largo plazo. Si se cierra y en el futuro se desea volver a abrir, se deben modificar los archivos de configuración de la siguiente manera.

En el archivo de configuración anterior, RemainAfterExit Campo establecido como yes , lo que indica que el servicio sigue ejecutándose incluso después de que el proceso haya salido. De esta manera, una vez que se use systemctl stop Orden de detener el servicio. ExecStop El comando especificado se ejecutará, lo que reactivará el panel táctil.

6.3 Comportamiento de reinicio

Service El bloque tiene algunos campos que definen el comportamiento de reinicio.

KillMode Campo: Definir cómo Systemd detiene el servicio sshd.

En el ejemplo anterior, se puede traducir como: KillMode Establecer como process Indica que solo se detiene el proceso principal, sin detener ningún subproceso de sshd, es decir, las sesiones SSH abiertas por los subprocesos permanecen conectadas. Esta configuración no es muy común, pero es importante para sshd; de lo contrario, al detener el servicio, también se terminarían las sesiones SSH que abriste.

KillMode Los valores que se pueden establecer para el campo son los siguientes.

grupo de control (valor predeterminado): todos los subprocesos en el grupo de control actual serán eliminados.

proceso: solo matar el proceso principal

mezclado: El proceso principal recibirá la señal SIGTERM, mientras que el proceso hijo recibirá la señal SIGKILL.

Ninguno: No se matará ningún proceso, solo se ejecutará el comando de detener el servicio.

A continuación es Restart Campo.

Restart Campo: Define la forma en que Systemd reinicia después de que sshd salga.

En el ejemplo anterior, Restart Establecer como on-failure cualquier falla inesperada, se reiniciará sshd. Si sshd se detiene normalmente (por ejemplo, al ejecutar systemctl stop comando), no se reiniciará.

Restart Los valores que se pueden establecer para el campo son los siguientes.

no (valor predeterminado): no reiniciará después de salir.

on-success: Solo reiniciará cuando se salga normalmente (código de estado de salida 0).

on-failure: solo se reiniciará en caso de salida anormal (código de estado distinto de 0), incluyendo terminación por señal y tiempo de espera.

on-abnormal: Solo se reiniciará si se termina por señal o por tiempo de espera.

on-abort: solo se reiniciará al recibir una señal de terminación no capturada.

on-watchdog: Reiniciará solo si se agota el tiempo de espera.

Siempre: independientemente de la razón de salida, siempre reiniciar.

Para el proceso de guardian, se recomienda establecerlo como on-failure Para aquellos servicios que permiten errores de salida, se puede establecer como on-abnormal

Finalmente es RestartSec Campo.

RestartSec Campo: Indica el número de segundos que se debe esperar antes de reiniciar el servicio en Systemd. En el ejemplo anterior, se establece un tiempo de espera de 42 segundos.

Siete, bloque [Install]

Install Bloque, definir cómo instalar este archivo de configuración, es decir, cómo hacer que se inicie al arrancar.

WantedBy Campo: indica el objetivo en el que se encuentra este servicio.

Target El significado es grupo de servicios, que representa un conjunto de servicios. WantedBy=multi-user.target se refiere a que el Target donde se encuentra sshd es multi-user.target Esta configuración es muy importante porque la ejecución. systemctl enable sshd.service al dar órdenes, sshd.service se colocará en un enlace simbólico. /etc/systemd/system debajo del índice multi-user.target.wants Dentro del subdirectorio. Systemd tiene un target de inicio predeterminado.

El resultado anterior indica que el objetivo de inicio predeterminado es multi-user.target Todos los servicios en este grupo se iniciarán automáticamente. Esta es la razón. systemctl enable La razón por la que se puede configurar el inicio automático es mediante el uso de Target. systemctl list-dependencies órdenes y systemctl isolate Los comandos también son muy útiles.

En general, hay dos tipos de Target que se utilizan comúnmente: uno es multi-user.target , indica el estado de línea de comandos de múltiples usuarios; el otro es graphical.target , representa el estado del usuario gráfico, depende de multi-user.target El documento oficial tiene una imagen muy clara. Diagrama de dependencias de Target

Ocho, el archivo de configuración de Target.

Target también tiene su propio archivo de configuración.

Nota: El archivo de configuración de Target no contiene comandos de inicio. Los principales campos en los resultados de salida anteriores significan lo siguiente.

Requires Campo: Requisitos basic.target Ejecutar juntos.

Conflicts Campo: campo de conflicto. Si rescue.service o rescue.target En funcionamiento, multi-user.target No puede funcionar, y viceversa.

After : indicar multi-user.target en basic.target rescue.service rescue.target Después, inícialos, si tienen arranque.

AllowIsolate : Permitir uso systemctl isolate Cambiar a comando multi-user.target

Nueve, reinicie después de modificar el archivo de configuración.

Después de modificar el archivo de configuración, es necesario recargar el archivo de configuración y luego reiniciar los servicios relacionados.

(Fin)

Información del documento

Declaración de derechos de autor: Reproducción libre - No comercial - No derivado - Mantener la atribución ( Licencia Creative Commons 3.0

Fecha de publicación: 8 de marzo de 2016

Recientemente has utilizado:

Coleccionar Menú QQ