Tutorial de introducción a Systemd: Parte práctica Uno. Encendido de la máquina. Dos, iniciar el servicio. Tres, detener el servicio. Cuatro, entender el archivo de configuración. Cinco, [Unidad] Bloque: Orden de inicio y dependencias. Sección seis: [Servicio] Bloque: Comportamiento de inicio 6.1 Comando de inicio 6.2 Tipo de inicio 6.3 Comportamiento de reinicio Siete, bloque [Install] Ocho, el archivo de configuración de Target. Nueve, reinicie después de modificar el archivo de configuración. Información del documento
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.
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).
$ sudo systemctl enable httpd
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.
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.
x
$ sudo systemctl start httpd
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.
x
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since 金 2014-12-05 12:18:22 JST; 7min ago
Main PID: 4349 (httpd)
Status: "Total requests: 1; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4349 /usr/sbin/httpd -DFOREGROUND
├─4350 /usr/sbin/httpd -DFOREGROUND
├─4351 /usr/sbin/httpd -DFOREGROUND
├─4352 /usr/sbin/httpd -DFOREGROUND
├─4353 /usr/sbin/httpd -DFOREGROUND
└─4354 /usr/sbin/httpd -DFOREGROUND
12月 05 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
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
Para detener el servicio en ejecución, es necesario ejecutar.
systemctl stop
Orden.
xxxxxxxxxx
$ sudo systemctl stop httpd.service
有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出
kill
Señal.
xxxxxxxxxx
$ sudo systemctl kill httpd.service
Además, se debe ejecutar el reinicio del servicio.
systemctl restart
Orden.
x
$ sudo systemctl restart httpd.service
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.
xxxxxxxxxx
$ systemctl cat sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
Type=simple
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
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.
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 sinetwork.target
osshd-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: representasshd.service
ysshd-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.
Service
¿Cómo se define el bloque para iniciar el servicio actual?
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.
xxxxxxxxxx
[Service]
ExecStart=/bin/echo execstart1
ExecStart=
ExecStart=/bin/echo execstart2
ExecStartPost=/bin/echo post1
ExecStartPost=/bin/echo post2
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.
xxxxxxxxxx
execstart2
post1
post2
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.
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á defork()
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-Busnotificar: 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.
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off
[Install]
WantedBy=multi-user.target
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.
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off start
ExecStop=/usr/bin/touchpad-off stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
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.
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.
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.
xxxxxxxxxx
$ systemctl get-default
multi-user.target
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.
xxxxxxxxxx
# Ver todos los servicios incluidos en multi-user.target
$ systemctl list-dependencies multi-user.target
# Cambiar a otro objetivo
# shutdown.target es el estado de apagado.
$ sudo systemctl isolate shutdown.target
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
。
Target también tiene su propio archivo de configuración.
xxxxxxxxxx
$ systemctl cat multi-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
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: Requisitosbasic.target
Ejecutar juntos.
Conflicts
Campo: campo de conflicto. Sirescue.service
orescue.target
En funcionamiento,multi-user.target
No puede funcionar, y viceversa.
After
: indicarmulti-user.target
enbasic.target
、rescue.service
、rescue.target
Después, inícialos, si tienen arranque.
AllowIsolate
: Permitir usosystemctl isolate
Cambiar a comandomulti-user.target
。
Después de modificar el archivo de configuración, es necesario recargar el archivo de configuración y luego reiniciar los servicios relacionados.
x
# Recargar el archivo de configuración
$ sudo systemctl daemon-reload
# Reiniciar servicios relacionados
$ sudo systemctl restart foobar
(Fin)
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: