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 httpdhttpd.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 -DFOREGROUND12月 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 daemonDocumentation=man:sshd(8) man:sshd_config(5)After=network.target sshd-keygen.serviceWants=sshd-keygen.service[Service]EnvironmentFile=/etc/sysconfig/sshdExecStart=/usr/sbin/sshd -D $OPTIONSExecReload=/bin/kill -HUP $MAINPIDType=simpleKillMode=processRestart=on-failureRestartSec=42s[Install]WantedBy=multi-user.targetSe 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.
      
     
AfterCampo: indica sinetwork.targetosshd-keygen.serviceNecesita ser activado, entonces.sshd.serviceDeberí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.
      
     
WantsCampo: representasshd.serviceysshd-keygen.service之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响sshd.serviceContinuar 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.
      
     
EnvironmentFileCampo: Especifica el archivo de parámetros del entorno actual del servicio. Dentro de este archivo,key=valuepar de clave-valor, se puede usar$keyen 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
      
      
       。
      
     
ExecStartCampo: 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.
      
     
ExecReloadCampo: Comando ejecutado al reiniciar el servicio.
ExecStopCampo: Comando a ejecutar al detener el servicio.
ExecStartPreCampo: Comandos que se ejecutan antes de iniciar el servicio.
ExecStartPostCampo: Comando que se ejecuta después de iniciar el servicio.
ExecStopPostCampo: Comandos a ejecutar después de detener el servicio.
Por favor, mira el siguiente ejemplo.
xxxxxxxxxx[Service]ExecStart=/bin/echo execstart1ExecStart=ExecStart=/bin/echo execstart2ExecStartPost=/bin/echo post1ExecStartPost=/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.
      
     
xxxxxxxxxxexecstart2post1post2
      
      
      
       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):
ExecStartEl proceso de inicio del campo es el proceso principal.forking:
ExecStartEl 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
simplepero solo se ejecuta una vez, Systemd esperará a que termine antes de iniciar otros servicios.dbus: similar a
simplepero se iniciará después de esperar la señal D-Busnotificar: similar a
simpleDespués de que se complete el arranque, se enviará una señal de notificación, y luego Systemd iniciará otros servicios.idle: similar a
simpleSin 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=oneshotExecStart=/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=oneshotExecStart=/usr/bin/touchpad-off startExecStop=/usr/bin/touchpad-off stopRemainAfterExit=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.
      
     
KillModeCampo: 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.
      
     
RestartCampo: 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.
      
     
RestartSecCampo: 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.
      
     
WantedByCampo: 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-defaultmulti-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 SystemDocumentation=man:systemd.special(7)Requires=basic.targetConflicts=rescue.service rescue.targetAfter=basic.target rescue.service rescue.targetAllowIsolate=yesNota: El archivo de configuración de Target no contiene comandos de inicio. Los principales campos en los resultados de salida anteriores significan lo siguiente.
RequiresCampo: Requisitosbasic.targetEjecutar juntos.
ConflictsCampo: campo de conflicto. Sirescue.serviceorescue.targetEn funcionamiento,multi-user.targetNo puede funcionar, y viceversa.
After: indicarmulti-user.targetenbasic.target、rescue.service、rescue.targetDespués, inícialos, si tienen arranque.
AllowIsolate: Permitir usosystemctl isolateCambiar 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: