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:
Podemos pará-lo novamente digitando:
Para reiniciar o serviço, podemos digitar:
Para tentar recarregar o serviço sem interromper a funcionalidade normal, podemos digitar:
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:
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 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
):
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
:
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, a partir da entrada mais antiga, digite:
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
:
Para ver apenas mensagens do kernel, como aquelas que são tipicamente representadas por dmesg
, você pode usar a sinalização -k
:
Novamente, você pode limitar isso apenas à inicialização atual adicionando a sinalização -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:
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
:
Como sempre, você pode limitar as entradas ao boot atual adicionando a flag -b
:
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:
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 as unidades de destino
expandidas recursivamente. Para expandir todas as unidades dependentes de forma recursiva, passe a sinalização --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 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:
Se preferir modificar todo o conteúdo do arquivo de unidade em vez de criar um trecho, passe a sinalização --full
:
Após modificar um arquivo de unidade, você deve recarregar o processo systemd
para que as alterações sejam aplicadas:
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:
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:
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 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:
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:
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 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:
- Como Usar o Systemctl para Gerenciar Serviços e Unidades do Systemd
- Como Usar o Journalctl para Visualizar e Manipular Logs do Systemd
- Entendendo Unidades e Arquivos de Unidade do Systemd
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.