GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo administrar los servicios de Systemd con Systemctl en Linux

Systemd un proceso estándar para administrar servicios de puesta en marcha en sistemas operativos Linux. Se utiliza para controlar qué programas se ejecutan cuando se inicia el sistema Linux. Es un administrador de sistemas y se ha convertido en el nuevo estándar para los sistemas operativos Linux. Systemd le permite crear un servicio systemd personalizado para ejecutar y administrar cualquier proceso. En este tutorial, explicaremos cómo administrar servicios con systemd en Linux.

Requisitos

  • Un servidor que ejecuta Linux con Systemd, usaré el servidor Ubuntu 20.04 aquí.
  • Se configura una contraseña de root en el servidor.

Verificar Systemd

De forma predeterminada, Systemd viene preinstalado en todos los principales sistemas operativos. Puede verificar la versión instalada de Systemd con el siguiente comando:

systemctl --version

Debería ver el siguiente resultado:

systemd 245 (245.4-4ubuntu3)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid

Puede encontrar la ubicación de Systemd con el siguiente comando:

whereis systemd

Deberías obtener el siguiente resultado:

systemd: /usr/bin/systemd /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz

Para encontrar la ubicación de systemctl, ejecute el siguiente comando:

whereis systemctl

Deberías obtener el siguiente resultado:

systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz

También puede verificar si Systemd se está ejecutando o no con el siguiente comando:

ps -eaf | grep systemd

Deberías obtener el siguiente resultado:

root         269       1  0 09:57 ?        00:00:01 /lib/systemd/systemd-journald
root         294       1  0 09:57 ?        00:00:00 /lib/systemd/systemd-udevd
systemd+     297       1  0 09:57 ?        00:00:00 /lib/systemd/systemd-networkd
message+     319       1  0 09:57 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root         329       1  0 09:57 ?        00:00:00 /lib/systemd/systemd-logind
systemd+     382       1  0 09:57 ?        00:00:00 /lib/systemd/systemd-resolved
root        1128       1  0 10:47 ?        00:00:00 /lib/systemd/systemd --user
root        1177    1152  0 10:48 pts/0    00:00:00 grep --color=auto systemd

También puede analizar el tiempo que tarda cada proceso en el arranque del sistema con el siguiente comando:

systemd-analyze blame

Deberías obtener el siguiente resultado:

3.662s csm.service                         
1.899s apt-daily-upgrade.service           
1.798s dev-sda1.device                     
1.400s systemd-logind.service              
1.336s fstrim.service                      
1.207s systemd-networkd.service            
1.131s systemd-resolved.service            
 856ms man-db.service                      
 842ms systemd-journald.service            
 415ms e2scrub_reap.service                
 320ms keyboard-setup.service              
 295ms networkd-dispatcher.service         
 239ms systemd-udev-trigger.service 

Para analizar la cadena crítica en el arranque con el siguiente comando:

systemd-analyze critical-chain

Deberías obtener el siguiente resultado:

The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.

graphical.target @4.948s
??multi-user.target @4.946s
  ??csm.service @1.282s +3.662s
    ??basic.target @1.277s
      ??sockets.target @1.276s
        ??dbus.socket @1.274s
          ??sysinit.target @1.257s
            ??systemd-update-utmp.service @1.247s +8ms
              ??systemd-tmpfiles-setup.service @1.228s +17ms
                ??systemd-journal-flush.service @1.201s +24ms
                  ??systemd-journald.service @356ms +842ms
                    ??systemd-journald.socket @313ms
                      ??system.slice @225ms
                        ??-.slice @225ms

Administrar servicios con Systemd

Systemctl proporciona una manera más fácil de administrar los servicios de systemd.

Para iniciar el servicio Apache, ejecute el siguiente comando:

systemctl start apache2

Para reiniciar el servicio de Apache, ejecute el siguiente comando:

systemctl restart apache2

Para detener el servicio de Apache, ejecute el siguiente comando:

systemctl stop apache2

Para recargar el servicio de Apache, ejecute el siguiente comando:

systemctl reload apache2

Para permitir que el servicio Apache se inicie después de reiniciar el sistema, ejecute el siguiente comando:

systemctl enable apache2

Para eliminar el servicio Apache del inicio del sistema, ejecute el siguiente comando:

systemctl disable apache2

Para eliminar el servicio de Apache, ejecute el siguiente comando:

systemctl kill apache2

Para enmascarar el servicio de Apache, ejecute el siguiente comando:

systemctl mask apache2

Para desenmascarar el proceso de Apache, ejecute el siguiente comando:

systemctl unmask apache2

Para verificar si el servicio Apache está habilitado o no, ejecute el siguiente comando:

systemctl is-enabled apache2

Para verificar el estado del servicio Apache, ejecute el siguiente comando:

systemctl status apache2

Si el servicio se está ejecutando, debería obtener el siguiente resultado:

? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-01-09 10:53:12 UTC; 26s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 1708 (apache2)
      Tasks: 55 (limit: 2353)
     Memory: 5.8M
     CGroup: /system.slice/apache2.service
             ??1708 /usr/sbin/apache2 -k start
             ??1709 /usr/sbin/apache2 -k start
             ??1710 /usr/sbin/apache2 -k start

Jan 09 10:53:12 ubuntu2004 systemd[1]: Starting The Apache HTTP Server...

Después de cambiar el nombre o eliminar cualquier archivo systemd, deberá volver a cargarlo para aplicar los cambios. Para recargar el archivo de servicio de systemd, ejecute el siguiente comando:

systemctl daemon-reload

Administrar archivos de unidades Systemd

Los comandos anteriores serán útiles para administrar servicios individuales. Sin embargo, no se puede utilizar para encontrar el estado actual del sistema. Hay muchos otros comandos que son útiles para proporcionar esta información.

Para ver una lista de todas las unidades disponibles, ejecute el siguiente comando:

systemctl list-unit-files

Debería ver una lista de todos los archivos de unidad en el siguiente resultado:

UNIT FILE                              STATE           VENDOR PRESET
proc-sys-fs-binfmt_misc.automount      static          enabled      
-.mount                                generated       enabled      
dev-hugepages.mount                    static          enabled      
dev-mqueue.mount                       static          enabled      
proc-sys-fs-binfmt_misc.mount          disabled        enabled      
sys-fs-fuse-connections.mount          static          enabled      
sys-kernel-config.mount                static          enabled      
sys-kernel-debug.mount                 static          enabled      
sys-kernel-tracing.mount               static          enabled      
acpid.path                             enabled         enabled      
ntp-systemd-netif.path                 enabled         enabled      
systemd-ask-password-console.path      static          enabled      
systemd-ask-password-wall.path         static          enabled      
session-2.scope                        transient       enabled      
acpid.service                          disabled        enabled      
apt-daily-upgrade.service              static          enabled      
apt-daily.service                      static          enabled      
[email protected]                        enabled         enabled      
console-getty.service                  disabled        disabled     
console-setup.service                  enabled         enabled      
[email protected]               static          enabled      
cron.service                           enabled         enabled      
cryptdisks-early.service               masked          enabled      
cryptdisks.service                     masked          enabled      
csm.service                            enabled         enabled      
dbus-org.freedesktop.hostname1.service static          enabled      
dbus-org.freedesktop.locale1.service   static          enabled      

Para ver una lista de todas las unidades activas, ejecuta el siguiente comando:

systemctl list-units

Debería ver el siguiente resultado:

  UNIT                                                                                        LOAD   ACTIVE SUB       DESCRIPTION             >
  proc-sys-fs-binfmt_misc.automount                                                           loaded active waiting   Arbitrary Executable Fil>
  sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device                                 loaded active plugged   Virtio network device   >
  sys-devices-pci0000:00-0000:00:04.0-virtio1-net-eth1.device                                 loaded active plugged   Virtio network device   >
  sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda-sda1.device loaded active plugged   QEMU_HARDDISK 1         >
  sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda.device      loaded active plugged   QEMU_HARDDISK           >
  sys-devices-platform-serial8250-tty-ttyS1.device                                            loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS10.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS11.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS12.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS13.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS14.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS15.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS16.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS17.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS18.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS19.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS2.device                                            loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS20.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS21.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS22.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS23.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS24.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS25.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS26.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS27.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS28.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS29.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS3.device                                            loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS30.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS31.device                                           loaded active plugged   /sys/devices/platform/se>

Para ver una lista de todas las unidades fallidas, ejecute el siguiente comando:

systemctl --failed

Para enumerar todos los servicios, incluidos los habilitados y deshabilitados, ejecute el siguiente comando:

systemctl list-unit-files --type=service

Debería ver el siguiente resultado:

UNIT FILE                              STATE           VENDOR PRESET
acpid.service                          disabled        enabled      
apache-htcacheclean.service            disabled        enabled      
[email protected]           disabled        enabled      
apache2.service                        enabled         enabled      
[email protected]                       disabled        enabled      
apt-daily-upgrade.service              static          enabled      
apt-daily.service                      static          enabled      
[email protected]                        enabled         enabled      
console-getty.service                  disabled        disabled     
console-setup.service                  enabled         enabled      
[email protected]               static          enabled      
cron.service                           enabled         enabled      
cryptdisks-early.service               masked          enabled      
cryptdisks.service                     masked          enabled      
csm.service                            enabled         enabled      
dbus-org.freedesktop.hostname1.service static          enabled      
dbus-org.freedesktop.locale1.service   static          enabled      
dbus-org.freedesktop.login1.service    static          enabled      
dbus-org.freedesktop.resolve1.service  enabled         enabled      
dbus-org.freedesktop.timedate1.service static          enabled      
dbus-org.freedesktop.timesync1.service masked          enabled      
dbus.service                           static          enabled      
debug-shell.service                    disabled        disabled     
dmesg.service                          enabled         enabled      
[email protected]                       static          enabled      
e2scrub_all.service                    static          enabled      
[email protected]                  static          enabled      
e2scrub_reap.service                   enabled         enabled      
emergency.service                      static          enabled      
fstrim.service                         static          enabled      
getty-static.service                   static          enabled      
[email protected]                         enabled         enabled      

Puede ver las propiedades de la unidad SSH, ejecute el siguiente comando:

systemctl show sshd.service

Debería ver el siguiente resultado:

Id=sshd.service
Names=sshd.service
Requires=basic.target
Wants=system.slice
WantedBy=multi-user.target
Conflicts=shutdown.target
Before=shutdown.target multi-user.target
After=syslog.target network.target auditd.service systemd-journald.socket basic.target system.slice
Description=OpenSSH server daemon

Administrar sockets con Systemctl

También puede administrar los sockets mediante el comando Systemctl.

Para enumerar todos los sockets del sistema disponibles, ejecute el siguiente comando:

systemctl list-unit-files --type=socket

Debería ver el siguiente resultado:

UNIT FILE                        STATE    VENDOR PRESET
acpid.socket                     enabled  enabled      
dbus.socket                      static   enabled      
ssh.socket                       disabled enabled      
syslog.socket                    static   disabled     
systemd-fsckd.socket             static   enabled      
systemd-initctl.socket           static   enabled      
systemd-journald-audit.socket    static   enabled      
systemd-journald-dev-log.socket  static   enabled      
[email protected] static   enabled      
systemd-journald.socket          static   enabled      
[email protected]         static   enabled      
systemd-networkd.socket          disabled enabled      
systemd-rfkill.socket            static   enabled      
systemd-udevd-control.socket     static   enabled      
systemd-udevd-kernel.socket      static   enabled      

Para iniciar el socket SSH, ejecute el siguiente comando:

systemctl start ssh.socket

Para detener el socket SSH, ejecute el siguiente comando:

systemctl stop ssh.socket

Para reiniciar el socket SSH, ejecute el siguiente comando:

systemctl restart ssh.socket

Para verificar el estado del socket SSH, ejecute el siguiente comando:

systemctl status ssh.socket

Para habilitar y deshabilitar el socket SSH en el momento del arranque, ejecute el siguiente comando:

systemctl enable ssh.socket
systemctl disable ssh.socket

Comandos adicionales de Systemctl

Puede realizar varias tareas con el comando systemctl. Si desea poner el sistema en modo de usuario único, ejecute el siguiente comando:

systemctl rescue

Para detener el sistema, ejecute el siguiente comando:

systemctl halt

Para apagar el sistema, ejecute el siguiente comando:

systemctl poweroff

Para reiniciar el sistema, ejecute el siguiente comando:

systemctl reboot

Conclusión

En la guía anterior, aprendió cómo administrar y controlar el servicio systemd en Linux. Espero que esto te ayude a interactuar y controlar tu instancia de systemd. Siéntase libre de preguntarme si tiene alguna pregunta.


Linux
  1. Administre múltiples instancias de servicio con systemctl

  2. Cómo administrar y enumerar servicios en Linux

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

  4. Cómo administrar los servicios de Linux con el comando systemctl

  5. Cómo enumerar los servicios de Systemd en Linux

Listado de servicios de Linux con Systemctl

Comandos Systemctl para administrar el servicio Systemd

Cómo administrar versiones de Nodejs con n en Linux

Cómo ejecutar Shell Script como servicio SystemD en Linux

Cómo usar systemctl en Linux

Cómo administrar el almacenamiento con GParted Linux