Essenciais do Systemd: Trabalhando com Serviços, Unidades e o Diário

Introdução

Nos últimos anos, as distribuições Linux têm cada vez mais transitado de outros sistemas de inicialização para o systemd. A suíte de ferramentas systemd oferece um modelo de inicialização rápido e flexível para gerenciar uma máquina inteira desde o boot.

Neste guia, vamos apresentar rapidamente os comandos mais importantes que você vai querer conhecer para gerenciar um servidor com systemd ativado. Estes devem funcionar em qualquer servidor que implemente systemd (qualquer versão do SO a partir do 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 atua é uma “unidade”. As unidades podem ser de muitos tipos, mas o tipo mais comum é um “serviço” (indicado por um arquivo de unidade que termina em .service). Para gerenciar serviços em um servidor com systemd ativado, 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 para demonstrar (você terá que instalar o Nginx com o 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 interrompê-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

Ativando ou Desativando Unidades

Por padrão, a maioria dos arquivos de unidade do systemd não são iniciados automaticamente no boot. Para configurar essa funcionalidade, você precisa “ativar” a unidade. Isso a conecta a um determinado “target” de boot, fazendo com que seja acionada quando esse target for 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 obter de um servidor systemd para ter uma visão geral do estado do sistema.

Por exemplo, para obter todos os arquivos de unidade que o systemd listou como “ativos”, digite (você pode realmente deixar de fora 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 switch --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, começando pela entrada mais antiga, digite:

  1. journalctl

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

Se desejar ver apenas as entradas do diário do boot atual, adicione o flag -b:

  1. journalctl -b

Para ver apenas mensagens do kernel, como aquelas normalmente representadas por dmesg, você pode usar o flag -k.

  1. journalctl -k

Novamente, você pode limitar isso apenas ao boot atual adicionando o flag -b:

  1. journalctl -k -b

Consulta de Estados e Registos

Enquanto os comandos acima fornecem acesso ao estado geral do sistema, você 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, dê a opção -u com o nome da unidade ao comando journalctl:

  1. journalctl -u nginx.service

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

  1. journalctl -b -u nginx.service

Inspeção de Unidades e Ficheiros de Unidade

Neste momento, você sabe como modificar o estado de uma unidade iniciando ou parando-a, e sabe como visualizar o estado e informações do 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 dos ficheiros 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 unidades de destino expandidas recursivamente. Para expandir todas as unidades dependentes de forma recursiva, passe a flag --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 lhe dará 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 para o local 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, basta chamar 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 flag --full:

  1. sudo systemctl edit --full nginx.service

Após modificar um arquivo de unidade, você deve recarregar o processo do systemd para aplicar suas alterações:

  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. Os sistemas de inicialização tradicionais geralmente se referem a eles como “níveis de execução”, permitindo que o sistema esteja em apenas um nível de execução de cada vez.

No systemd, são usados “alvos” em vez disso. Os alvos são basicamente pontos de sincronização que o servidor pode usar para levar o servidor a um estado específico. Arquivos de serviço e outras unidades podem estar associados a um alvo e vários 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 (o 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 transitar 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 transitar, atalhos estão disponíveis. Por exemplo, para desligar 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 aliases tradicionais para essas operações, para que você possa simplesmente digitar sudo poweroff ou sudo reboot sem o systemctl. No entanto, isso não é garantido estar configurado em todos os sistemas.

Próximos Passos

Neste ponto, você deve saber o básico sobre 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 init, 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