Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Introdução aos fundamentos do systemd

Introdução aos fundamentos do systemd

Data de Publicação: 12/12/2024
O QUE É?

O systemd é usado para gerenciar configurações e serviços do sistema. O systemd organiza tarefas em componentes chamados unidades e grupos de unidades em destinos.

POR QUÊ?

Conhecer os fundamentos do systemd, que incluem funcionalidades essenciais, como gerenciamento de serviços, monitoramento de dependências, registro, gerenciamento de recursos, ativação de soquetes e controle do sistema.

DEDICAÇÃO

Tempo de leitura de 20 minutos.

REQUISITOS
  • Conhecimento básico dos comandos do Linux

  • Conhecimento básico dos processos, daemons e grupos de controle do Linux

1 O que é systemd?

O systemd é um gerenciador de sistemas e serviços para sistemas operacionais Linux. Trata-se do sistema de inicialização padrão das principais distribuições Linux. O systemd não é iniciado diretamente pelo usuário, mas instalado por meio do /sbin/init e iniciado durante a inicialização antecipada. O systemd atua como o sistema init que ativa e mantém os serviços do espaço do usuário quando executado como o primeiro processo na inicialização (PID 1). O PID 1 é conhecido como init e é o primeiro processo de modo de usuário do Linux criado. Ele é executado até o encerramento do sistema.

O systemd tem a propriedade do PID 1 e é iniciado diretamente pelo kernel. Todos os outros processos são iniciados diretamente pelo systemd ou por um de seus processos filho. O systemd monta o sistema de arquivos do host e gerencia os arquivos temporários. Ele tem compatibilidade retroativa com os scripts init do SysV. O SysV é um sistema de inicialização que antecede o systemd.

No systemd, uma unidade é um recurso que o sistema sabe como operar e gerenciar. Esse é o objeto principal usado pelas ferramentas do systemd. Esses recursos são definidos com arquivos de configuração chamados arquivos de unidade.

systemctl é a ferramenta de gerenciamento central para controle do sistema init. Ela é usada para examinar e controlar o estado do sistema systemd e do gerenciador de serviços.

Os destinos no systemd são grupos de unidades relacionadas que atuam como pontos de sincronização durante a inicialização do sistema. Os arquivos de unidade de destino têm a extensão .target. As unidades de destino agrupam várias unidades do systemd por meio de uma cadeia de dependências.

Para solucionar problemas, você pode usar journalctl para consultar e exibir mensagens de registro do diário do systemd.

Para obter mais informações sobre o systemd, você pode acessar https://systemd.io e consultar man 1 systemd.

2 Sobre o processo de boot do systemd

A primeira etapa do processo de boot é carregar o kernel Linux, que é o principal componente do sistema operacional Linux. Após o carregamento do kernel, ele inicializará o hardware e iniciará o processo do systemd, que é o primeiro processo executado no sistema.

2.1 Processo de boot do Linux

O processo de boot do Linux é a fase inicial da inicialização do sistema operacional. É o processo pelo qual o sistema operacional carrega a memória, inicializa os componentes e se prepara para executar os aplicativos de usuário.

O processo de boot do Linux é dividido em quatro fases principais:

Fase 1: BIOS

Quando você liga o computador, ele inicia o BIOS (Basic Input/Output System) e executa um POST (Power On Self Test). Essa é uma verificação de integridade que analisa a funcionalidade dos componentes do hardware, como discos rígidos, SSD, teclado, RAM, portas USB e qualquer outro hardware. Se o hardware funcionar como esperado, o processo de boot avançará para a próxima fase.

Fase 2: O carregador de boot

Após a conclusão do POST, o BIOS procura e carrega o programa do carregador de boot armazenado no MBR (Master Boot Record). O MBR é um código de 512 bytes que geralmente está localizado em /dev/sda ou /dev/hda, dependendo da arquitetura da unidade de disco rígido. O MBR também pode estar localizado em uma instalação ativa do Linux por USB ou DVD. O BIOS é carregado e executa esse código MBR.

Há três carregadores de boot principais no Linux: LILO, GRUB e GRUB2. O carregador de boot GRUB2 (Grand Unified Bootloader) é o mais recente e o principal nas distribuições Linux modernas. O arquivo de configuração do GRUB2 está localizado em /boot/grub2/grub2.cfg. Depois que o BIOS localiza o carregador de boot GRUB2, ele o executa e o carrega na memória principal (RAM).

Fase 3: Inicialização do kernel Linux

O kernel Linux é o núcleo do sistema operacional. No sistema Linux, o kernel faz interface com o hardware, controla o gerenciamento de memória e gerencia os processos. O carregador de boot carrega o kernel Linux selecionado. O kernel é autoextraído de uma versão compactada e monta o sistema de arquivos raiz. Em seguida, ele executa o programa /sbin/init.

Fase 4: systemd

O kernel carrega o systemd, que é um gerenciador de sistemas e serviços para sistemas operacionais Linux. Em seguida, o systemd executa todos os outros processos de inicialização.

2.2 Processo de boot com systemd

Depois que o kernel carrega o systemd, o systemd assume o controle e inicia os outros serviços do sistema necessários para ativar e executar o sistema. Dentre eles estão o serviço de rede, o gerenciador de login etc.

O processo de boot é paralelizado na ordem em que as unidades de destino específicas são executadas. O systemd usa o arquivo /etc/systemd/system/default.target para determinar o destino no qual o sistema Linux deve ser inicializado. Esse arquivo é um link para graphical.target, que inicializa o gerenciador de login gráfico. O systemd ativa todas as unidades de destino que são dependências do default.target e também, repetidamente, todas as dependências dessas dependências. Depois que todos os serviços forem iniciados, o sistema estará pronto para uso, e o gerenciador de login será exibido. Agora você pode efetuar login e começar a usar o sistema.

2.3 Analisando o desempenho do processo de boot do sistema com o comando systemd-analyze

Use o comando systemd-analyze para analisar o desempenho do processo de boot do sistema. O comando também pode ser usado para recuperar outras informações de estado e rastreamento do gerenciador de sistemas e serviços. Ele é usado para verificar se os arquivos de unidade estão corretos e também para acessar funções especiais úteis para depuração avançada do gerenciador de sistemas.

Alguns exemplos incluem:

Ver o tempo que leva para o sistema ser inicializado
> systemd-analyze time
Startup finished in 3.404s (kernel) + 2.415s (initrd) + 13.125s (userspace) = 18.945s
graphical.target reached after 13.117s in userspace
Obter uma visão geral de alto nível do processo de boot, que inclui os serviços iniciados e o tempo necessário para iniciar cada serviço
> systemd-analyze critical-chain
  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 @13.117s
  └─multi-user.target @13.117s
    └─getty.target @13.117s
      └─getty@tty1.service @13.116s
        └─plymouth-quit-wait.service @10.775s +2.338s
          └─systemd-user-sessions.service @10.769s +3ms
            └─remote-fs.target @10.764s
              └─iscsi.service @10.747s +16ms
                └─network-online.target @10.744s
                  └─NetworkManager-wait-online.service @1.547s +9.197s
                    └─NetworkManager.service @1.507s +37ms
                      └─network-pre.target @1.504s
                        └─wpa_supplicant.service @2.341s +5ms
                          └─dbus.service @1.042s
                            └─basic.target @1.036s
                              └─sockets.target @1.036s
                                └─snapd.socket @1.035s +590us
                                  └─sysinit.target @1.030s
                                    └─systemd-update-utmp.service @1.025s +5ms
                                      └─auditd.service @976ms +47ms
                                        └─systemd-tmpfiles-setup.service @964ms +9ms
                                          └─local-fs.target @962ms
                                            └─snapd.mounts.target @961ms
                                              └─snap-core18-2796.mount @417ms +543ms
                                                └─dev-loop9.device @961ms +628us

Esse comando imprime uma árvore de unidades de tempo críticas para cada uma das unidades especificadas ou para o destino padrão. A inicialização dos serviços pode depender da ativação de soquete e da execução paralela de unidades. Semelhante ao comando blame, ele mostra o tempo que uma unidade leva para ser ativada, o que não é definido para unidades de dispositivo, que fazem a transição direta para o estado ativo.

Ver uma lista de serviços iniciados durante o processo de boot e exibidos de acordo com o tempo gasto por cada serviço
> systemd-analyze blame
  9.197s NetworkManager-wait-online.service
  4.002s fwupd.service
  2.338s plymouth-quit-wait.service
  1.282s dracut-pre-udev.service
  1.062s sys-devices-platform-serial8250-tty-ttyS0.device
  1.062s dev-ttyS0.device
  1.061s dev-ttyS1.device
  1.061s sys-devices-platform-serial8250-tty-ttyS1.device
  1.060s dev-ttyS11.device
  1.060s sys-devices-platform-serial8250-tty-ttyS11.device
  1.059s sys-devices-platform-serial8250-tty-ttyS13.device
  1.059s dev-ttyS13.device
  1.059s sys-devices-platform-serial8250-tty-ttyS10.device
  1.059s dev-ttyS10.device
  1.058s sys-devices-platform-serial8250-tty-ttyS14.device
  1.058s dev-ttyS14.device
  1.058s dev-ttyS12.device
  1.058s sys-devices-platform-serial8250-tty-ttyS12.device
  1.056s sys-devices-platform-serial8250-tty-ttyS17.device

A inicialização de um serviço pode ser lenta porque está aguardando a conclusão de outra inicialização de serviço. Ele mostra o tempo que uma unidade leva para ser ativada, o que não é definido para unidades de dispositivo, que fazem a transição direta para o estado ativo. Esse comando não exibe resultados para serviços com Type=simple porque o systemd considera esses serviços como iniciados imediatamente; logo, não é possível analisar os atrasos na inicialização.

Gerar um arquivo de gráfico vetorial que exibe os eventos ocorridos durante o processo de boot
> systemd-analyze plot > /temp/sample.svg

Esse comando cria um arquivo SVG no diretório temp. O SVG é um arquivo de texto que define um conjunto de vetores gráficos que os aplicativos, como o LibreOffice Draw, usam para gerar um gráfico.

3 Estrutura de um arquivo de unidade

No systemd, uma unidade refere-se a qualquer recurso que o sistema sabe como operar e gerenciar. Esse é o objeto principal usado pelas ferramentas do systemd. Esses recursos são definidos usando arquivos de configuração chamados arquivos de unidade. A administração torna-se mais fácil quando você conhece os arquivos de unidade ao trabalhar com o systemd. Os arquivos de unidade usam uma sintaxe declarativa simples que permite ver facilmente a finalidade e os efeitos de uma unidade após a ativação. Os arquivos de unidade têm seções com diretivas, por exemplo:

[Section]
        Directive1=value
        Directive2=value
        . . .

Os tipos de arquivo de unidade incluem as seguintes seções:

[Unit]

A primeira seção encontrada na maioria dos arquivos de unidade é [Unit]. Essa seção é usada para definir os metadados do arquivo de unidade e configurar o relacionamento dele com outros arquivos de unidade. Normalmente, essa seção é posicionada sobre as demais porque apresenta uma visão geral do arquivo de unidade.

[Automount] / [Mount] / [Path] / [Service] / [Slice] / [Socket] /[Swap] / [Timer]

Seções que contêm diretivas específicas ao respectivo tipo. Consulte a Seção 4, “Tipos de arquivo de unidade” para ver uma lista dos tipos disponíveis. Observe que os tipos device, target, snapshot e scope não têm uma seção específica ao tipo.

[Install]

Geralmente, ela é a última seção no arquivo de unidade e é opcional. Essa seção é usada para definir o comportamento de um arquivo de unidade quando ele está habilitado ou desabilitado. Quando você habilita um arquivo de unidade, ele é iniciado automaticamente no momento da inicialização. Com base na unidade específica, pode haver uma dependência em outras unidades relacionadas para que funcione apropriadamente. Por exemplo, chrony requer as diretivas After, Wants e Before, que são todas dependências com as quais o chrony trabalha.

Exemplo 1: Um arquivo de serviço do systemd
[Unit]
Description=usbguard 1

[Service]
ExecStart=/usr/sbin/usb-daemon 2

[Install]
WantedBy=multi-user.target 3

1

Uma descrição breve e significativa que explica a finalidade do arquivo de serviço.

2

Especifica o programa que será executado quando o serviço for iniciado.

3

Inicia um sistema multiusuário com rede e sem ambiente gráfico. Essa diretiva permite especificar um relacionamento de dependência.

4 Tipos de arquivo de unidade

Você pode determinar o tipo de unidade pela extensão do arquivo. O systemd categoriza as unidades de acordo com o tipo de recurso que elas descrevem.

Tipos de arquivos de unidade disponíveis para o systemd:

.service

Descreve como gerenciar um serviço ou aplicativo. Essa descrição inclui como iniciar ou parar o serviço, recarregar seu arquivo de configuração (se aplicável), em que condições o serviço é iniciado automaticamente e as informações de dependência ou de hierarquia para arquivos de unidade relacionados.

.scope

Esse arquivo de unidade é criado automaticamente pelo systemd com base nas informações recebidas da interface D-Bus e é usado para gerenciar conjuntos de processos do sistema que são criados externamente.

.path

Define um caminho para a ativação baseada em caminho. Por padrão, um arquivo de unidade .service com o mesmo nome de base é ativado. inotify é uma API de kernel usada por programas que desejam ser notificados sobre mudanças em arquivos.

.snapshot

O comando systemctl snapshot cria automaticamente um arquivo de unidade .snapshot. Esse comando cria instantâneos temporários do estado atual do sistema. Você pode modificar o estado atual do sistema após fazer mudanças. Os instantâneos são usados para reverter estados temporários.

.timer

Define um temporizador gerenciado pelo systemd. Isso é semelhante a uma tarefa cron para ativação atrasada ou programada. Um arquivo de unidade com o mesmo nome, mas com a extensão .service, é iniciado quando o temporizador é atingido.

.slice

Associe nós do Grupo de Controle do Linux, que permitem atribuir ou restringir recursos a qualquer processo associado à seção. O nome indica a hierarquia na árvore de grupos de controle. As unidades são colocadas em seções por padrão, dependendo do respectivo tipo.

.target

Efetua a sincronização com outras unidades durante uma inicialização ou uma mudança no estado, ou coloca o sistema em um novo estado. Outras unidades especificam sua relação com os destinos para sincronização com as operações do destino.

.socket

Descreve uma rede, um soquete IPC ou um buffer PEPS que o systemd usa para ativação baseada em soquete. Há um arquivo .service associado que é iniciado quando uma atividade é vista no soquete definido por essa unidade.

.device

Define um dispositivo que foi designado para gerenciamento do systemd pelo sistema de arquivos udev ou sysfs. Nem todos os dispositivos têm o arquivo .device. Esse arquivo de unidade é obrigatório para solicitar, montar ou acessar um dispositivo.

.swap

Define o espaço de troca (swap) no sistema. O nome do arquivo de unidade deve refletir o dispositivo ou o caminho de arquivo do espaço.

.mount

Define um ponto de montagem no sistema que será gerenciado pelo systemd. O nome desse arquivo é baseado no caminho de montagem, com traços no lugar das barras. As entradas em /etc/fstab podem ter as unidades criadas automaticamente.

.automount

Define um ponto de montagem que é montado automaticamente. Nomeie o arquivo de acordo com o ponto de montagem ao qual ele se refere. Um arquivo de unidade .mount correspondente é necessário para definir as especificações da montagem.

5 Dependências e ordem das unidades

O systemd tem dois tipos de dependências: de requisito e de ordem. As dependências de requisitos especificam que outras unidades devem ser iniciadas ou interrompidas ao ativar uma unidade. As dependências de ordem especificam a ordem em que as unidades devem ser iniciadas.

Dependências da unidade

Os arquivos de unidade têm o recurso de dependências. Uma unidade pode querer ou exigir uma ou mais unidades para ser executada. Essas dependências são definidas em arquivos de unidade com as diretivas Wants e Requires.

Wants

Por exemplo, se a unidade A tem Wants=unit B, quando a unidade A é executada, a unidade B também é executada. No entanto, se a unidade B é ou não iniciada com êxito, isso não influencia a execução bem-sucedida da unidade A.

Requires

Se a unidade A tem Requires=unit B, as duas unidades são executadas; mas, se a unidade B não é executada com êxito, a unidade A é desativada. Não importa se os processos da unidade A teriam sido executados com êxito.

Ordem da unidade

Sem instruções apropriadas, o systemd pode executar um grupo de unidades ao mesmo tempo. Iniciar os serviços na ordem certa é importante para o bom funcionamento do sistema Linux. Você pode organizar a ordem com as diretivas de arquivo de unidade Before e After.

Before

Por exemplo, se a unidade A tem Before=unit B, quando as duas unidades são executadas, a unidade A é executada na íntegra antes da unidade B.

After

Se a unidade A tem After=unit B, quando as duas unidades são executadas, a unidade B é executada na íntegra antes da unidade A.

6 Registro

Arquivos de registro e diários são importantes para a administração do sistema. Eles incluem informações detalhadas sobre um sistema e são muito importantes para solução de problemas e auditoria. Os arquivos de registro contêm eventos e mensagens gerados pelo kernel, pelos aplicativos e pelos usuários que efetuam login no sistema. Você pode usar o comando journalctl para consultar o diário. Esse comando exibe os registros coletados pelo systemd. O serviço systemd-journald processa a coleta de registros do systemd. O systemd-journald grava os eventos e as mensagens em formato binário.

7 Destinos do systemd

O systemd usa unidades e destinos. Uma unidade do systemd define um serviço ou ação no sistema, que consiste em nome, tipo e arquivo de configuração. Um destino do systemd combina várias unidades e define quais serviços devem ser iniciados para atingir o destino. Em um servidor, por exemplo, trata-se do estado em que a rede é executada e vários usuários podem efetuar login. Esses arquivos são identificados pelo sufixo .target.

Semelhante aos arquivos de unidade, destinos diferentes podem ser aninhados por meio de dependências. Por exemplo, multi-user.target requer (entre outros) os destinos que configuram os serviços de login e de sessão do usuário.

Destinos comuns do systemd:

default.target

Inicializado por padrão. O arquivo default.target é um link simbólico para o verdadeiro arquivo de destino, como graphical.target para uma estação de trabalho desktop. Para um servidor, ele costuma ser graphical.target.

poweroff.target

Encerra e desliga o sistema.

rescue.target

Unidade de destino que extrai o sistema base e inicia uma sessão de shell de recuperação.

multi-user.target

Configura um sistema multiusuário não gráfico (console).

graphical.target

Usa um sistema multiusuário gráfico com serviços de rede.

reboot.target

Encerra e reinicializa o sistema.

Para obter mais informações sobre os destinos do systemd, consulte man 5 systemd.target e man 7 systemd.special.

8 Usando systemd como usuário comum

Você pode usar o systemd como um usuário comum para melhorar a segurança ou quando não tiver privilégios de usuário root. É possível executar um serviço sem privilégio criando um user.

Ao criar e usar um serviço de usuário, considere o seguinte:

  • As sessões do serviço de usuário são terminadas quando a sessão do usuário termina. É possível anular esse comportamento usando o comando loginctl enable-linger USERNAME.

  • Os arquivos de serviço de usuário estão localizados em /etc/systemd/user ou $HOME/.config/systemd/user/.

  • Você pode controlar os serviços de usuário com o comando systemctl --user.

9 Comandos systemctl

O comando systemctl é usado para examinar e controlar o estado do systemd e do gerenciador de serviços.

Você pode usar os seguintes comandos systemctl comuns e consultar a página man systemctl.

9.1 Exibindo informações sobre systemd

Para ver informações sobre os componentes do systemd, você pode usar os seguintes comandos:

systemctl list-units

Lista as unidades do systemd. Você pode usar os argumentos opcionais: --state=running para mostrar as unidades ativas e --type=service para mostrar as unidades ativas e encerradas.

systemctl list-unit-files

Lista as unidades do systemd e o status, como estático, gerado, desabilitado, álias, mascarado e habilitado.

systemctl list-dependencies

Lista a árvore de dependências.

systemctl list-dependencies UNIT_FILE

Lista as dependências de um arquivo de unidade.

9.2 Gerenciando serviços do systemd

O comando systemctl permite executar as tarefas com serviços a seguir.

systemctl status SERVICE

Verifica o status do serviço específico.

systemctl show SERVICE

Exibe as informações do serviço.

systemctl start SERVICE

Em vez de iniciar o serviço manualmente, use o comando start. Quando uma mudança é feita no arquivo de configuração, o serviço relacionado deve ser iniciado novamente.

systemctl stop SERVICE

Interrompe um determinado serviço em execução.

systemctl restart SERVICE

Em vez de reiniciar o serviço manualmente, use o comando restart. Quando uma mudança é feita no arquivo de configuração, o serviço relacionado deve ser reiniciado outra vez.

systemctl enable SERVICE

Habilita o serviço durante a inicialização.

systemctl disable SERVICE

Desabilita o serviço durante a inicialização.

systemctl reload-or-restart SERVICE

Recarregue o serviço se ele suportar recarregamento; do contrário, ele reiniciará o serviço. Se o serviço não estiver em execução, ele será reiniciado.

systemctl mask SERVICE

Quando um serviço é mascarado, isso significa que o arquivo de unidade tem um link simbólico para /dev/null. Um link simbólico para um serviço mascarado é criado de /etc/systemd/system para apontar para /dev/null. Isso torna impossível carregar o serviço, mesmo que outro serviço habilitado exija o carregamento. Ele deve ser interrompido manualmente; do contrário, continuará sendo executado em segundo plano. Você pode usar a opção --runtime para mascarar apenas temporariamente até a próxima reinicialização do sistema.

Created symlink /etc/systemd/system/FOSSLinux.service → /dev/null.
systemctl unmask SERVICE

Desmascara o serviço. Isso é efetivo quando o sistema é iniciado ou reiniciado manualmente.

9.3 Gerenciando estados do sistema

O comando systemctl permite executar processos de gerenciamento de energia no sistema, como reinicialização, encerramento e assim por diante, conforme descrito a seguir.

systemctl reboot

Reinicializa o sistema reboot.target.

systemctl poweroff

Desliga o sistema poweroff.target.

systemctl emergency

Entra no modo de emergência emergency.target.

systemctl default

Volta para o destino padrão multi-user.target.

10 Solução de problemas do systemd

Você pode usar as seguintes dicas de solução de problemas para identificar e resolver problemas com os serviços do systemd e garantir uma operação do sistema contínua.

Verificar sintaxe do seu arquivo de unidade do systemd com o comando systemd-analyze verify SERVICE

Antes de iniciar ou habilitar um serviço do systemd, verifique a sintaxe do arquivo de unidade para garantir que não haja erros. Por exemplo:

> sudo systemd-analyze verify /etc/systemd/system/my-custom-service.service

O comando analisa o arquivo de unidade e relata erros de sintaxe, arquivos ausentes ou outros problemas. Você deve corrigir quaisquer problemas relatados antes de habilitar e iniciar o serviço.

Consultar os registros do serviço com o comando journalctl -u SERVICE

Se você tiver qualquer problema com um serviço do systemd, consulte o registro do serviço. Por exemplo:

> sudo  journalctl -u my-custom-service.service

O comando exibe os registros do serviço especificado, incluindo mensagens de erro, avisos ou outras informações relevantes. Você pode usar esses registros para identificar e corrigir problemas com o serviço.

Usar o comando systemd-analyze plot para visualizar o processo de inicialização

Se um serviço estiver causando problemas durante o processo de boot, você poderá usar systemd-analyze plot command para visualizar o processo de boot e identificar os problemas. Por exemplo:

> sudo systemd-analyze plot > boot-plot.svg

O comando cria um arquivo SVG chamado boot-plot.svg que contém uma representação gráfica do processo de boot e dos possíveis problemas. Isso inclui o horário de início e de término de cada serviço. Você pode abrir esse arquivo em um visualizador de imagens compatível com SVG ou em um browser da Web para analisar os serviços que estão causando problemas durante o processo de inicialização.

Solucionar problemas de serviços com falha

Para descobrir quais serviços falharam e inspecionar a saída do registro:

> sudo systemctl --state=failed
Verificar o status de runtime de um serviço

Para descobrir o status de runtime atual de um serviço:

> sudo systemctl status SERVICE
O encerramento ou a reinicialização é demorado

Se o encerramento ou a reinicialização for demorado, a causa pode ser um serviço que não está sendo encerrado. O systemd aguarda algum tempo até que cada serviço seja encerrado antes de tentar terminá-lo. Um problema comum é um serviço suspenso ou um encerramento travado. Para descobrir isso, execute o seguinte comando:

> sudo systemctl poweroff
  Failed to power off system via logind: There's already a shutdown or sleep operation in progress
> sudo systemctl list-jobs

Você pode cancelar as tarefas em execução e em espera e encerrar ou reinicializar novamente:

> sudo systemctl cancel
> sudo systemctl stop systemd-suspend.service

11 Melhores práticas do systemd

Você pode seguir algumas das melhores práticas para garantir serviços do systemd eficientes e preparados para operar em diversas situações.

Verificar o status de runtime de um serviço

Para descobrir o status de runtime atual de um serviço:

> sudo systemctl status SERVICE
Usar o caminho absoluto no arquivo de unidade do systemd

Use um caminho absoluto para arquivos executáveis e necessários, como arquivos de configuração ou scripts, em seu arquivo de unidade do systemd. O systemd não depende das variáveis de ambiente do usuário, como $PATH, para localizar arquivos.

Usar a diretiva ExecReload

Use a diretiva ExecReload na seção [SERVICE] para definir um comando específico que deve ser executado quando você recarregar um serviço com o comando systemctl reload. Esse procedimento é útil para serviços que podem recarregar suas configurações dinamicamente, sem reinicialização.

[Service]
ExecStart=PATH_TO_EXECUTABLE
ExecReload=PATH_TO_RELOAD_SCRIPT
Usar a diretiva RestartSec

Use a diretiva RestartSec na seção [SERVICE] para definir um atraso (em segundos) antes de reiniciar serviço após uma falha. Esse procedimento é útil para serviços que exigem um tempo especificado para liberar recursos ou evitar loops de reinicialização rápida que podem causar alta carga do sistema.

[Service]
ExecStart=PATH_TO_EXECUTABLE
Restart=on-failure
RestartSec=5
Desabilitar o modo de emergência em uma máquina remota

Você pode desabilitar o modo de emergência em uma máquina remota, por exemplo, uma máquina virtual hospedada no Google Cloud. Se esse modo estiver habilitado, a máquina não poderá se conectar à rede. Por exemplo:

> sudo systemctl mask emergency.service
> sudo systemctl mask emergency.target