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:
Podemos interrompê-lo novamente digitando:
Para reiniciar o serviço, podemos digitar:
Para tentar recarregar o serviço sem interromper a funcionalidade normal, podemos digitar:
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:
Se desejar desativar o serviço novamente, digite:
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
):
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
:
Para listar todas as unidades instaladas no sistema, incluindo aquelas que o systemd
não tentou carregar na memória, digite:
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:
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
:
Para ver apenas mensagens do kernel, como aquelas normalmente representadas por dmesg
, você pode usar o flag -k
.
Novamente, você pode limitar isso apenas ao boot atual adicionando o flag -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:
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
:
Como sempre, você pode limitar as entradas ao arranque atual adicionando a bandeira -b
:
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:
Para ver a árvore de dependências de uma unidade (quais unidades o systemd
tentará ativar ao iniciar a unidade), digite:
Isso mostrará as unidades dependentes, com unidades de destino
expandidas recursivamente. Para expandir todas as unidades dependentes de forma recursiva, passe a flag --all
:
Finalmente, para ver os detalhes de baixo nível das configurações da unidade no sistema, você pode usar a opção show
:
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:
Se preferir modificar todo o conteúdo do arquivo de unidade em vez de criar um trecho, passe a flag --full
:
Após modificar um arquivo de unidade, você deve recarregar o processo do systemd
para aplicar suas alterações:
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:
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:
Você pode alterar o alvo padrão que será usado no boot usando a opção set-default
:
Para ver quais unidades estão associadas a um alvo, você pode digitar:
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:
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:
Se desejar reiniciar o sistema, isso pode ser feito digitando:
Você pode inicializar no modo de resgate digitando:
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:
- Como Usar o Systemctl para Gerenciar Serviços e Unidades do Systemd
- Como Usar o Journalctl para Visualizar e Manipular Logs do Systemd
- Compreensão das Unidades e Arquivos de Unidade do Systemd
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.