Essenciais do Systemd: Trabalhando com Serviços, Unidades e o Jornal

Introdução

Nos últimos anos, as distribuições Linux têm cada vez mais feito a transição de outros sistemas de inicialização para o systemd. O conjunto de ferramentas systemd fornece um modelo de inicialização rápido e flexível para gerenciar toda a máquina desde o boot em diante.

Neste guia, daremos uma rápida passada pelos comandos mais importantes que você vai querer saber para gerenciar um servidor habilitado para systemd. Estes devem funcionar em qualquer servidor que implemente o systemd (qualquer versão do SO igual ou superior ao Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15). Vamos começar.

Gerenciamento Básico de Unidades

O objeto básico que o systemd gerencia e age sobre é uma “unidade”. As unidades podem ser de muitos tipos, mas o tipo mais comum é um “serviço” (indicado por um arquivo de unidade terminando em .service). Para gerenciar serviços em um servidor habilitado para systemd, nossa principal ferramenta é o comando systemctl.

Todos os comandos normais do sistema de inicialização têm ações equivalentes com o comando systemctl. Vamos usar a unidade nginx.service como exemplo (você terá que instalar o Nginx com seu gerenciador de pacotes para obter este arquivo de serviço).

Por exemplo, podemos iniciar o serviço digitando:

  1. sudo systemctl start nginx.service

Podemos pará-lo novamente digitando:

  1. sudo systemctl stop nginx.service

Para reiniciar o serviço, podemos digitar:

  1. sudo systemctl restart nginx.service

Para tentar recarregar o serviço sem interromper a funcionalidade normal, podemos digitar:

  1. sudo systemctl reload nginx.service

Habilitando ou Desabilitando Unidades

Por padrão, a maioria dos arquivos de unidades do systemd não são iniciados automaticamente no boot. Para configurar essa funcionalidade, você precisa “habilitar” a unidade. Isso a conecta a um determinado “alvo” de inicialização, fazendo com que seja acionada quando esse alvo é iniciado.

Para habilitar um serviço para iniciar automaticamente no boot, digite:

  1. sudo systemctl enable nginx.service

Se desejar desativar o serviço novamente, digite:

  1. sudo systemctl disable nginx.service

Obtendo uma Visão Geral do Estado do Sistema

Há uma grande quantidade de informações que podemos extrair de um servidor systemd para obter uma visão geral do estado do sistema.

Por exemplo, para obter todos os arquivos de unidades que o systemd listou como “ativos”, digite (você pode realmente omitir o list-units já que esse é o comportamento padrão do systemctl):

  1. systemctl list-units

Para listar todas as unidades que o systemd carregou ou tentou carregar na memória, incluindo aquelas que não estão atualmente ativas, adicione o interruptor --all:

  1. systemctl list-units --all

Para listar todas as unidades instaladas no sistema, incluindo aquelas que o systemd não tentou carregar na memória, digite:

  1. systemctl list-unit-files

Visualizando Informações Básicas de Log

A systemd component called journald collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.

Para ver todas as entradas de log, a partir da entrada mais antiga, digite:

  1. journalctl

Por padrão, isso mostrará as entradas do log da inicialização atual e da inicialização anterior se o journald estiver configurado para salvar registros da inicialização anterior. Algumas distribuições habilitam isso por padrão, enquanto outras não o fazem (para habilitar isso, edite o arquivo /etc/systemd/journald.conf e defina a opção Storage= para “persistent” ou crie o diretório persistente digitando sudo mkdir -p /var/log/journal).

Se você deseja ver apenas as entradas do jornal da inicialização atual, adicione a sinalização -b:

  1. journalctl -b

Para ver apenas mensagens do kernel, como aquelas que são tipicamente representadas por dmesg, você pode usar a sinalização -k:

  1. journalctl -k

Novamente, você pode limitar isso apenas à inicialização atual adicionando a sinalização -b:

  1. journalctl -k -b

Consultando Estados de Unidades e Logs

Ao passar os comandos acima, você teve acesso ao estado geral do sistema, mas também pode obter informações sobre o estado de unidades individuais.

Para ver uma visão geral do estado atual de uma unidade, você pode usar a opção status com o comando systemctl. Isso mostrará se a unidade está ativa, informações sobre o processo e as últimas entradas do jornal:

  1. systemctl status nginx.service

Para ver todas as entradas do jornal para a unidade em questão, use a opção -u com o nome da unidade no comando journalctl:

  1. journalctl -u nginx.service

Como sempre, você pode limitar as entradas ao boot atual adicionando a flag -b:

  1. journalctl -b -u nginx.service

Inspeção de Unidades e Arquivos de Unidade

Agora, você sabe como modificar o estado de uma unidade iniciando ou parando-a, e sabe como visualizar informações de estado e jornal para ter uma ideia do que está acontecendo com o processo. No entanto, ainda não vimos como inspecionar outros aspectos das unidades e arquivos de unidade.

A unit file contains the parameters that systemd uses to manage and run a unit. To see the full contents of a unit file, type:

  1. systemctl cat nginx.service

Para ver a árvore de dependências de uma unidade (quais unidades o systemd tentará ativar ao iniciar a unidade), digite:

  1. systemctl list-dependencies nginx.service

Isso mostrará as unidades dependentes, com as unidades de destino expandidas recursivamente. Para expandir todas as unidades dependentes de forma recursiva, passe a sinalização --all:

  1. systemctl list-dependencies --all nginx.service

Finalmente, para ver os detalhes de baixo nível das configurações da unidade no sistema, você pode usar a opção show:

  1. systemctl show nginx.service

Isso fornecerá o valor de cada parâmetro sendo gerenciado pelo systemd.

Modificando Arquivos de Unidade

Se você precisar fazer uma modificação em um arquivo de unidade, o systemd permite que você faça alterações a partir do próprio comando systemctl, para que você não precise ir até a localização real do disco.

Para adicionar um trecho de arquivo de unidade, que pode ser usado para anexar ou substituir configurações no arquivo de unidade padrão, simplesmente chame a opção edit na unidade:

  1. sudo systemctl edit nginx.service

Se preferir modificar todo o conteúdo do arquivo de unidade em vez de criar um trecho, passe a sinalização --full:

  1. sudo systemctl edit --full nginx.service

Após modificar um arquivo de unidade, você deve recarregar o processo systemd para que as alterações sejam aplicadas:

  1. sudo systemctl daemon-reload

Usando Alvos (Níveis de Execução)

Outra função de um sistema de inicialização é transicionar o próprio servidor entre diferentes estados. Sistemas de inicialização tradicionais normalmente se referem a estes como “níveis de execução”, permitindo que o sistema esteja apenas em um nível de execução de cada vez.

No systemd, “alvos” são usados ao invés disso. Alvos são basicamente pontos de sincronização que o servidor pode utilizar para trazer o servidor para um estado específico. Arquivos de serviço e outras unidades podem ser associados a um alvo e múltiplos alvos podem estar ativos ao mesmo tempo.

Para ver todos os alvos disponíveis no seu sistema, digite:

  1. systemctl list-unit-files --type=target

Para visualizar o alvo padrão que o systemd tenta alcançar no boot (que por sua vez inicia todos os arquivos de unidade que compõem a árvore de dependências desse alvo), digite:

  1. systemctl get-default

Você pode alterar o alvo padrão que será usado no boot usando a opção set-default:

  1. sudo systemctl set-default multi-user.target

Para ver quais unidades estão associadas a um alvo, você pode digitar:

  1. systemctl list-dependencies multi-user.target

Você pode modificar o estado do sistema para transicionar entre alvos com a opção isolate. Isso irá parar quaisquer unidades que não estão associadas ao alvo especificado. Certifique-se de que o alvo que você está isolando não pare quaisquer serviços essenciais:

  1. sudo systemctl isolate multi-user.target

Parando ou Reiniciando o Servidor

Para alguns dos principais estados para os quais um sistema pode transicionar, atalhos estão disponíveis. Por exemplo, para desligar o seu servidor, você pode digitar:

  1. sudo systemctl poweroff

Se desejar reiniciar o sistema, isso pode ser feito digitando:

  1. sudo systemctl reboot

Você pode inicializar no modo de resgate digitando:

  1. sudo systemctl rescue

Observe que a maioria dos sistemas operacionais inclui alias tradicionais para essas operações, de modo que você pode simplesmente digitar sudo poweroff ou sudo reboot sem o systemctl. No entanto, isso não é garantido para estar configurado em todos os sistemas.

Próximos Passos

Neste momento, você deve conhecer o básico de como gerenciar um servidor que utiliza systemd. No entanto, há muito mais a aprender à medida que suas necessidades se expandem. Abaixo estão links para guias com informações mais detalhadas sobre alguns dos componentes que discutimos neste guia:

Ao aprender a aproveitar os pontos fortes do seu sistema de inicialização, você pode controlar o estado de suas máquinas e gerenciar mais facilmente seus serviços e processos.

Source:
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal