GNU/Linux >> Tutoriales Linux >  >> Linux

Administre múltiples instancias de servicio con systemctl

Servicios, servicios, servicios. Un servicio es una gran parte de la informática. Estás leyendo este artículo sobre un servicio. Su computadora está ejecutando servicios. Internet está lleno de ellos.

Acerca de systemctl

En Linux, la forma estándar de ejecutar y administrar servicios es a través de la utilidad systemd y el comando systemctl . Su uso es bastante simple:solo necesita saber el nombre del servicio que desea administrar, luego puede usar este comando para iniciar o detener el servicio, verificar su estado o realizar otras funciones:

# systemctl start httpd

# systemctl stop httpd

# systemctl status httpd

Archivos de unidad

Un servicio se define en un archivo llamado archivo de unidad. Generalmente se encuentran en el directorio /usr/lib/systemd/system . Aquí hay una lista de muestra:

# ls /usr/lib/systemd/system
 auditd.service                              multi-user.target                    sys-kernel-debug.mount
 [email protected]                             multi-user.target.wants              sys-kernel-tracing.mount
 basic.target                                NetworkManager-dispatcher.service    syslog.socket
 basic.target.wants                          NetworkManager.service               syslog.target.wants
 blk-availability.service                    NetworkManager-wait-online.service  

A veces, necesita ejecutar más de una instancia de un servicio en un solo host. Por ejemplo, si mantiene sitios web para varios clientes, las normas de seguridad exigen que cada cliente tenga su propia instancia individual. Esto significa que necesita ejecutar un nuevo servicio Apache HTTP para cada uno, pero tener muchos servicios puede ser difícil de administrar. Si tiene 10 clientes diferentes, tendría que crear 10 archivos de unidad separados para administrarlos. Afortunadamente, existe una forma mejor de gestionar varias instancias de un servicio.

El símbolo @

Tenga en cuenta que algunos de los archivos de unidad tienen un símbolo @ en su nombre. Este símbolo tiene un significado interesante. De hecho, después de instalar Apache HTTP Server, es posible que observe varios archivos de unidades de servicio, incluido uno que tiene el símbolo @ en su nombre:[email protected] .

Le mostraré cómo esto puede hacer que la vida de un administrador de sistemas sea un poco más fácil, utilizando el servidor Apache HTTP para este ejemplo:

# dnf -y install httpd

# cd /usr/lib/systemd/system
# ls -d http*
httpd.service  [email protected]  httpd.service.d  httpd.socket  httpd.socket.d

El símbolo @ indica que se realizará una sustitución. Systemd tomará lo que escriba después y reemplazará la variable %i dentro del archivo de la unidad de servicio. La variable se puede ver en este extracto del [email protected] archivo:

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:[email protected](8)

[Service]
Type=notify
Environment=LANG=C
Environment=HTTPD_INSTANCE=%i
ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-%i
ExecStartPre=/bin/chown root.apache /run/httpd/instance-%i
ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-%i
ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-%i
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/%i.conf
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful -f conf/%i.conf

Tenga en cuenta que el archivo de unidad httpd predeterminado, httpd.service , no tiene el símbolo @ en su nombre y se ve diferente. Se utiliza para una única instancia predeterminada básica del servidor Apache HTTP.

Ejecutar varias instancias

Más sobre administradores de sistemas

  • Habilitar el blog de administrador del sistema
  • La empresa automatizada:una guía para administrar TI con automatización
  • Libro electrónico:Automatización de Ansible para administradores de sistemas
  • Historias del campo:una guía del administrador de sistemas para la automatización de TI
  • eBook:Una guía de Kubernetes para SRE y administradores de sistemas
  • Últimos artículos de administrador de sistemas

Para ejecutar múltiples instancias usando este archivo de unidad especial, cada una necesita un nombre único. Suponga que tiene dos clientes, The Little Bank y The Big Bank. Nombra las instancias littlebank y bigbank. Para administrar uno, simplemente agregue su nombre después del símbolo @. Inicie cada instancia con el comando apropiado:

  • littlebank:systemctl start httpd@littlebank
  • bigbank:systemctl start httpd@bigbank

Tenga en cuenta que la mayoría de los servicios necesitan ciertas configuraciones para evitar conflictos entre diferentes instancias. No los cubriré todos aquí, pero Apache necesita varias cosas, incluidos números de puerto de escucha únicos, archivos PID y raíces de documentos.

Lo demostraré intentando iniciar la instancia de littlebank. Espero que falle, pero proporcionará un mensaje de estado útil:

# systemctl start httpd@littlebank

# systemctl status httpd@littlebank
[email protected] - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Tue 2020-11-10 11:41:20 EST; 1min 58s ago
       Docs: man:[email protected](8)
    Process: 2205 ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2207 ExecStartPre=/bin/chown root.apache /run/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2208 ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2209 ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2210 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/littlebank.conf (code=exited, status=1/FAILURE)
   Main PID: 2210 (code=exited, status=1/FAILURE)
        CPU: 26ms

Nov 10 11:41:20 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Nov 10 11:41:20 localhost.localdomain httpd[2210]: httpd: Could not open configuration file /etc/httpd/conf/littlebank.conf>
Nov 10 11:41:20 localhost.localdomain systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAIL>
Nov 10 11:41:20 localhost.localdomain systemd[1]: [email protected]: Failed with result 'exit-code'.
Nov 10 11:41:20 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.

Puede ver que systemd sustituye correctamente el nombre de la instancia en lugar de %i variable en el archivo de la unidad. Sin embargo, Apache no se inicia porque no pudo abrir un archivo de configuración. Entonces, ahora configuraré las instancias para incluir la creación de los archivos de configuración necesarios (littlebank.conf y bigbank.conf ) en /etc/httpd/conf/ :

# ls /etc/httpd/conf
bigbank.conf  httpd.conf  littlebank.conf

Ahora puede administrar cada instancia con systemctl . Problema start y status comandos a cada uno. He acortado el resultado a los detalles más relevantes:

# systemctl start httpd@bigbank
# systemctl start httpd@littlebank

# systemctl status httpd@bigbank
[email protected] - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
     Active: active (running) since Tue 2020-11-10 12:26:06 EST; 56min ago
     
# systemctl status httpd@littlebank
[email protected] - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
     Active: active (running) since Tue 2020-11-10 12:25:58 EST; 55min ago

Aquí está la vista de proceso de estas instancias. Hay más de uno porque Apache está bifurcando los procesos del servidor, lo que normalmente hace:

# pgrep -a httpd
2834 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
2835 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
2836 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
3061 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf
3062 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf
3064 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf

Ponlo en uso

Esta pequeña característica de systemd es muy útil cuando necesita muchas instancias de un servicio. Espero que pueda darle un buen uso en su trabajo.


Linux
  1. Administrar el inicio usando systemd

  2. Cómo usar el comando Systemctl para administrar los servicios de Systemd

  3. Use Systemctl para administrar servicios

  4. systemctl:comando no encontrado

  5. Ejemplos de comandos systemctl en Linux

Instale varias instancias de Drupal con Nginx en Ubuntu 20.04

Comandos Systemctl para administrar el servicio Systemd

Cómo administrar varias versiones de Java con jEnv en Linux

Administrar cgroups con systemd

Primeros pasos con systemctl

Cómo usar systemctl en Linux