systemdjournalctl: consultar o diário do systemdudevsystemd
O programa systemd tem ID de processo 1. Ele é responsável por inicializar o sistema da forma exigida. O systemd é iniciado diretamente pelo Kernel e resiste ao sinal 9, que normalmente termina os processos. Todos os outros programas são iniciados diretamente pelo systemd ou por um de seus processos filho.
Desde o SUSE Linux Enterprise Desktop 12, o systemd é o substituto do popular daemon init do System V. O systemd é totalmente compatível com o init do System V (pois suporta scripts init). Uma das vantagens principais do systemd é que ele acelera consideravelmente o tempo de boot, devido à sua capacidade agressiva de paralelização para iniciar serviços. Além disso, o systemd apenas inicia um serviço quando é realmente necessário. Os daemons não são iniciados incondicionalmente no momento da inicialização, mas, em vez disso, quando são solicitados pela primeira vez. O systemd também suporta Grupos de Controle do Kernel (cgroups), criação de instantâneos, restauração do estado do sistema, etc. Consulte http://www.freedesktop.org/wiki/Software/systemd/ para obter os detalhes.
Esta seção apresenta detalhes sobre o conceito que rege o systemd.
O systemd é um gerenciador de sistema e sessão para Linux, compatível com os scripts init do System V e do LSB. Os principais recursos são:
capacidade agressiva de paralelização
uso de soquete e ativação por D-Bus para iniciar serviços
capacidade de iniciar daemons sob demanda
acompanhamento de processos usando cgroups do Linux
suporte à criação de instantâneos e restauração do estado do sistema
manutenção dos pontos de montagem e automount
implementação de uma lógica elaborada de controle de serviço baseada em dependência transacional
O arquivo de configuração unit codifica as informações sobre serviço, soquete, dispositivo, ponto de montagem, ponto de automount, arquivo de troca ou partição, destino de inicialização, caminho do sistema de arquivos monitorado, temporizador controlado e supervisionado pelo systemd, instantâneo de estado do sistema temporário, fração de gerenciamento de recursos ou grupo de processos criados externamente. O “arquivo unit” é um termo genérico usado pelo systemd para o seguinte:
Serviço. Informações sobre um processo (por exemplo, a execução de um daemon); o arquivo termina com .service
Destinos. Usado para agrupar unidades e como pontos de sincronização durante a inicialização; o arquivo termina com .target
Soquetes.
Informações sobre um soquete de rede, IPC ou FIFO do sistema de arquivos, para ativação baseada em soquete (como inetd); o arquivo termina com .socket
Caminho. Usado para acionar outras unidades (por exemplo, executar um serviço quando houver mudanças nos arquivos); o arquivo termina com .path
Timer. Informações sobre um temporizador controlado, para ativação baseada em temporizador; o arquivo termina com .timer
Ponto de montagem. Normalmente, gerado de forma automática pelo gerador fstab; o arquivo termina com .mount
Ponto de automount. Informações sobre um ponto de automount do sistema de arquivos; o arquivo termina com .automount
Swap. Informações sobre um dispositivo ou arquivo de troca para paginação de memória; o arquivo termina com .swap
Dispositivo. Informações sobre uma unidade de dispositivo conforme exposta na árvore de dispositivos do sysfs/udev(7); o arquivo termina com .device
Escopo/Fração. Um conceito de gerenciamento hierárquico de recursos de um grupo de processos; o arquivo termina com .scope/.slice
Para obter mais informações sobre o systemd.unit, consulte http://www.freedesktop.org/software/systemd/man/systemd.unit.html
O sistema init do System V usa vários comandos diferentes para gerenciar os serviços: scripts init, insserv, telinit e outros. O systemd facilita gerenciar serviços, já que existe apenas um comando para memorizar para a maioria das tarefas de gerenciamento de serviços: systemctl. Ele usa a notação “command plus subcommand”, como git ou zypper:
systemctl [general OPTIONS] subcommand [subcommand OPTIONS]
Consulte man 1 systemctl para obter o manual completo.
Se a saída chegar a um terminal (e não a um pipe ou arquivo, por exemplo), por padrão, os comandos systemd enviarão uma saída extensa para um pager. Use a opção --no-pager para desativar o modo de paginação.
O systemd também suporta a complementação bash, que permite digitar as primeiras letras de um subcomando e pressionar →| para completá-lo automaticamente. Esse recurso está disponível apenas no shell bash e requer a instalação do pacote bash-completion.
Os subcomandos de gerenciamento de serviços são os mesmos usados para gerenciar um serviço com o init do System V (start, stop, etc.). A sintaxe geral dos comandos de gerenciamento de serviços é a seguinte:
systemctl reload|restart|start|status|stop|... <my_service(s)>.service
rc<my_service(s)> reload|restart|start|status|stop|...
O systemd permite gerenciar vários serviços de uma só vez. Em vez de executar os scripts init um após o outro como acontece com o init do System V, execute um comando da seguinte forma:
systemctl start <my_1st_service>.service <my_2nd_service>.service
Para listar todos os serviços disponíveis no sistema:
systemctl list-unit-files --type=service
A tabela a seguir lista os comandos de gerenciamento de serviços mais importantes para o systemd e o init do System V:
|
Tarefa |
Comando systemd |
Comando init do System V |
|---|---|---|
|
Iniciando. |
start |
start |
|
Parar. |
stop |
stop |
|
Reiniciar. Encerra os serviços e os inicia na sequência. Se algum serviço ainda não estiver em execução, ele será iniciado. |
restart |
restart |
|
Reiniciar condicionalmente. Reinicia os serviços se já estiverem em execução. Não faz nada para os serviços que não estão em execução. |
try-restart |
try-restart |
|
Recarregar.
Instrui os serviços a recarregarem seus arquivos de configuração sem interromper a operação. Caso de uso: Instruir o Apache a recarregar um arquivo de configuração |
reload |
reload |
|
Recarregar ou reiniciar. Recarrega os serviços quando o recarregamento é suportado; do contrário, reinicia-os. Se algum serviço ainda não estiver em execução, ele será iniciado. |
reload-or-restart |
n/a |
|
Recarregar ou reiniciar condicionalmente. Recarrega os serviços se o recarregamento for suportado; do contrário reinicia-os, se estiverem em execução. Não faz nada para os serviços que não estão em execução. |
reload-or-try-restart |
n/a |
|
Obter informações detalhadas sobre status.
Lista as informações sobre o status dos serviços. O comando |
status |
status |
|
Obter informações resumidas sobre status. Mostra se os serviços estão ou não ativos. |
is-active |
status |
Os comandos de gerenciamento de serviços mencionados na seção anterior permitem manipular serviços na seção atual. O systemd também permite habilitar ou desabilitar serviços permanentemente para serem iniciados automaticamente quando solicitados ou para ficarem sempre indisponíveis. É possível fazer isso com o YaST ou por linha de comando.
A tabela a seguir lista os comandos de habilitação e desabilitação pelo systemd e pelo init do System V:
Ao habilitar um serviço na linha de comando, ele não é iniciado automaticamente. Ele é programado para iniciar na próxima inicialização do sistema ou mudança de nível de execução/destino. Para iniciar um serviço logo após ele ter sido habilitado, execute systemctl start <meu_serviço>.service ou rc<meu_serviço> start explicitamente.
|
Tarefa |
|
Comando init do System V |
|---|---|---|
|
Habilitando. |
|
|
|
Desabilitar. |
|
|
|
Verificar. Mostra se um serviço está ou não habilitado. |
|
n/d |
|
Reabilitar. Semelhante a reiniciar um serviço, este comando primeiro desabilita e depois habilita um serviço. Útil para restaurar um serviço aos seus padrões. |
|
n/d |
|
Mascarar. Após “desabilitar” um serviço, ele ainda poderá ser iniciado manualmente. Para desabilitar um serviço completamente, é necessário mascará-lo. Use com cuidado. |
|
n/d |
|
Desmascarar. Só será possível usar novamente um serviço mascarado depois que ele for desmascarado. |
|
n/d |
Todo o processo de inicialização e encerramento do sistema é mantido pelo systemd. Desse ponto de vista, o Kernel pode ser considerado um processo em segundo plano para manter todos os outros processos e ajustar o tempo de CPU e o acesso ao hardware de acordo com as solicitações de outros programas.
Com o init do System V, o sistema era inicializado no chamado “Nível de execução”. O nível de execução define como o sistema é iniciado e quais serviços estão disponíveis no sistema em execução. Os níveis de execução são numerados: os mais conhecidos são 0 (encerramento do sistema), 3 (multiusuário com rede) e 5 (multiusuário com rede e gerenciador de exibição).
O systemd apresenta um novo conceito usando as chamadas “unidades de destino”. No entanto, ele continua totalmente compatível com o conceito de nível de execução. As unidades de destino são nomeadas, e não numeradas, e possuem finalidades específicas. Por exemplo, os destinos local-fs.target e swap.target montam sistemas de arquivos locais e espaços de troca.
O destino graphical.target oferece recursos de sistema multiusuário com rede e gerenciador de exibição e equivale ao nível de execução 5. Destinos complexos, como graphical.target, agem como destinos “meta”, combinando um subconjunto de outros destinos. Como o systemd facilita criar destinos personalizados combinando destinos existentes, ele oferece excelente flexibilidade.
A lista a seguir mostra as unidades de destino mais importantes do systemd. Para ver a lista completa, consulte man 7 systemd.special.
default.target
O destino que é inicializado por padrão. Não um destino “real”, mas um link simbólico para outro destino, como graphic.target. Pode ser modificado permanentemente pelo YaST (consulte a Seção 11.4, “Gerenciando serviços com o YaST”). Para mudá-lo em uma sessão, use a opção de linha de comando do Kernel systemd.unit=<meu_destino>.destino no prompt de boot.
emergency.target
Inicia o shell de emergência no console. Use-o apenas no prompt de boot como systemd.unit=emergency.target.
graphical.target
Inicia um sistema com suporte a rede multiusuário e um gerenciador de exibição.
halt.target
Encerra o sistema.
mail-transfer-agent.target
Inicia todos os serviços necessários para enviar e receber e-mails.
multi-user.target
Inicia um sistema multiusuário com rede.
reboot.target
Reinicializa o sistema.
rescue.target
Inicia um sistema de usuário único sem rede.
Para continuar compatível com o sistema de nível de execução init do System V, o systemd oferece destinos especiais chamados runlevelX.target mapeados a níveis de execução correspondentes numerados X.
Para saber o destino atual, use o comando: systemctl get-default
systemd #|
Nível de execução do System V |
Destino do |
Finalidade |
|---|---|---|
|
0 |
|
Encerramento do sistema |
|
1, S |
|
Modo de usuário único |
|
2 |
|
Multiusuário local sem rede remota |
|
3 |
|
Multiusuário completo com rede |
|
4 |
|
Não usado/Definido pelo usuário |
|
5 |
|
Multiusuário completo com rede e gerenciador de exibição |
|
6 |
|
Reinicialização do sistema |
/etc/inittab
Os níveis de execução em um sistema init do System V são configurados em /etc/inittab. O systemd não usa essa configuração. Consulte a Seção 11.5.3, “Criando destinos personalizados” para obter instruções sobre como criar seu próprio destino inicializável.
Use os seguintes comandos para operar com unidades de destino:
|
Tarefa |
Comando systemd |
Comando init do System V |
|---|---|---|
|
Mudar o destino/nível de execução atual |
|
|
|
Mudar para o destino/nível de execução padrão |
|
n/d |
|
Obter o destino/nível de execução atual |
Com o systemd, normalmente há mais de um destino ativo. O comando lista todos os destinos que estão ativos. |
ou
|
|
Mudar o nível de execução padrão de forma persistente |
Use o Gerenciador de Serviços ou execute o seguinte comando:
|
Use o Gerenciador de Serviços ou mude a linha
em |
|
Mudar o nível de execução padrão para o processo de boot atual |
Digite a seguinte opção no prompt de boot
|
Digite o número do nível de execução desejado no prompt de boot. |
|
Mostrar as dependências de um destino/nível de execução |
“Requires” lista as dependências obrigatórias (hard) (aquelas que devem ser resolvidas), enquanto “Wants” lista as dependências desejadas (soft) (aquelas que são resolvidas quando possível). |
n/d |
O systemd oferece os meios para a análise dos processos de inicialização do sistema. É possível revisar a lista de todos os serviços e status de forma prática (sem ter que analisar o /varlog/). O systemd permite também explorar o procedimento de inicialização para descobrir quanto tempo leva para inicializar cada serviço.
Para revisar a lista completa dos serviços que foram iniciados desde a inicialização do sistema, digite o comando systemctl. Ele lista todos os serviços ativos, conforme mostrado a seguir (resumidamente). Para obter mais informações sobre determinado serviço, use systemctl status <meu_serviço>.service.
root # systemctl
UNIT LOAD ACTIVE SUB JOB DESCRIPTION
[...]
systemd-random-seed-load.path loaded active waiting Random Seed
acpid.service loaded active running ACPI Event Daemon
apache2.service loaded failed failed apache
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
bluez-coldplug.service loaded active exited LSB: handles udev coldplug of bluetooth dongles
console-kit...-system-start.service loaded active exited Console System Startup Logging
cron.service loaded active running Command Scheduler
cups.service loaded active running CUPS Printing Service
[...]
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
JOB = Pending job for the unit.
107 units listed. Pass --all to see inactive units, too.
Para restringir o resultado a serviços com falha na inicialização, use a opção --failed:
root # systemctl --failed
UNIT LOAD ACTIVE SUB JOB DESCRIPTION
apache2.service loaded failed failed apache
NetworkManager.service loaded failed failed Network Manager
plymouth-start.service loaded failed failed Show Plymouth Boot Screen
[...]
Para depurar o tempo de inicialização do sistema, o systemd oferece o comando systemd-analyze. Ele mostra o tempo total de inicialização, uma lista dos serviços solicitados por tempo de inicialização e também gera um gráfico SVG mostrando o tempo que os serviços levaram para serem iniciados em relação a outros serviços.
root # systemd-analyze
Startup finished in 2666ms (kernel) + 21961ms (userspace) = 24628msroot # systemd-analyze blame
6472ms systemd-modules-load.service
5833ms remount-rootfs.service
4597ms network.service
4254ms systemd-vconsole-setup.service
4096ms postfix.service
2998ms xdm.service
2483ms localnet.service
2470ms SuSEfirewall2_init.service
2189ms avahi-daemon.service
2120ms systemd-logind.service
1210ms xinetd.service
1080ms ntp.service
[...]
75ms fbset.service
72ms purge-kernels.service
47ms dev-vda1.swap
38ms bluez-coldplug.service
35ms splash_early.serviceroot # systemd-analyze plot > jupiter.example.com-startup.svg
Os comandos mencionados anteriormente permitem revisar os serviços que foram iniciados e o tempo que levou para iniciá-los. Se você precisar de mais detalhes, poderá instruir o systemd a registrar de forma verbosa o procedimento de inicialização completo, digitando os seguintes parâmetros no prompt de boot:
systemd.log_level=debug systemd.log_target=kmsg
Agora o systemd grava suas mensagens de registro no buffer de anel do kernel. Veja esse buffer com dmesg:
dmesg -T | less
O Systemd é compatível com o System V, o que ainda permite usar os scripts init existentes do System V. Entretanto, há pelo menos um problema conhecido em que o script init do System V não funciona com o Systemd out-of-the-box: iniciar um serviço como outro usuário por meio de su ou sudo nos scripts init resulta em falha do script, gerando um erro de “Acesso negado”.
Ao mudar o usuário com su ou sudo, é iniciada uma sessão PAM. Essa sessão será terminada após a conclusão do script init. Como consequência, o serviço que foi iniciado pelo script init também será terminado. Para solucionar esse erro, faça o seguinte:
Crie um agrupador de arquivo de serviço com o mesmo nome do script init e mais a extensão de nome de arquivo .service:
[Unit] Description=DESCRIPTION After=network.target [Service] User=USER Type=forking1 PIDFile=PATH TO PID FILE1 ExecStart=PATH TO INIT SCRIPT start ExecStop=PATH TO INIT SCRIPT stop ExecStopPost=/usr/bin/rm -f PATH TO PID FILE1 [Install] WantedBy=multi-user.target2
Substitua todos os valores gravados em LETRAS MAIÚSCULAS pelos valores apropriados.
Inicie o daemon com systemctl start APLICATIVO.service
O gerenciamento básico de serviços também pode ser feito com o módulo Gerenciador de Serviços do YaST. Ele permite iniciar, parar, habilitar e desabilitar serviços. Ele permite também mostrar o status e mudar o destino padrão de um serviço. Inicie o módulo do YaST em › › (Gerenciador de Serviços).
Para mudar o destino de inicialização do sistema, escolha o destino na caixa suspensa (Destino Padrão do Sistema). Os destinos mais usados são (Interface Gráfica) (iniciando uma tela gráfica de login) e (iniciando o sistema no modo de linha de comando).
Selecione um serviço da tabela. A coluna mostra se ele está em execução () ou não (). Para alternar o status, escolha .
Quando um serviço é iniciado ou parado, seu status muda na sessão que está em execução. Para mudar seu status em todas as reinicializações, é necessário habilitá-lo ou desabilitá-lo.
Selecione um serviço da tabela. A coluna mostra se ele está ou . Para alternar o status, escolha .
Quando um serviço é habilitado ou desabilitado, você configura se ele deve ser iniciado durante a inicialização () ou não (). Essa configuração não afeta a sessão atual. Para mudar seu status na sessão atual, é necessário iniciá-lo ou pará-lo.
Para ver a mensagem de status de um serviço, selecione-o na lista e escolha . A saída exibida será idêntica a que foi gerada pelo comando systemctl .
-l status <meu_serviço>
Configurações de nível de execução defeituosas podem tornar o sistema inutilizável. Antes de aplicar as mudanças, tenha absoluta certeza sobre suas consequências.
systemd #
As seções a seguir mostram alguns exemplos de personalizações do systemd.
Faça sempre as personalizações do systemd em /etc/systemd/, nunca em /usr/lib/systemd/. Do contrário, as mudanças serão sobregravadas na próxima atualização do systemd.
Os arquivos de serviço do systemd estão localizados em /usr/lib/systemd/system. Para personalizá-los, faça o seguinte:
Copie os arquivos que deseja modificar de /usr/lib/systemd/system para /etc/systemd/system. Mantenha os mesmos nomes de arquivo dos originais.
Modifique as cópias em /etc/systemd/system de acordo com as suas necessidades.
Para obter uma visão geral das mudanças de configuração, use o comando systemd-delta. Ele compara e identifica os arquivos de configuração que anulam outros arquivos de configuração. Para obter detalhes, consulte a página de manual do systemd-delta.
Os arquivos modificados em /etc/systemd terão prioridade sobre os arquivos originais em /usr/lib/systemd/system, desde que seus nomes sejam iguais.
Para adicionar apenas algumas linhas a um arquivo de configuração ou modificar uma pequena parte dele, é possível usar os chamados arquivos “dropin”. Esses arquivos permitem estender a configuração dos arquivos de unidade sem ter que editá-los ou anulá-los realmente.
Por exemplo, para mudar um valor no serviço foobar localizado em /usr/lib/systemd/system/ foobar.service, faça o seguinte:
Crie um diretório chamado /etc/systemd/system/<meu_serviço>.service.d/.
Observe o sufixo .d. O diretório deve receber outro nome de acordo com o serviço que você deseja corrigir com o arquivo dropin.
Nesse diretório, crie um arquivo qualquermodificação.conf.
Verifique se ele contém somente a linha com o valor que deseja modificar.
Grave as mudanças feitas no arquivo Ele será usado como extensão do arquivo original.
Nos sistemas init SUSE do System V, o nível de execução 4 não costuma ser usado para permitir que administradores criem sua própria configuração de nível de execução. O systemd permite criar qualquer número de destinos personalizados. A sugestão é começar adaptando um destino existente, como graphical.target.
Copie o arquivo de configuração /usr/lib/systemd/system/graphical.target para /etc/systemd/system/<meu_destino>.target e ajuste-o de acordo com as suas necessidades.
O arquivo de configuração copiado na etapa anterior já inclui as dependências obrigatórias (“hard”) do destino. Para incluir também as dependências desejadas (“soft”), crie um diretório /etc/systemd/system/<meu_destino>.target.wants.
Para cada serviço desejado, crie um link simbólico de /usr/lib/systemd/system para /etc/systemd/system/<meu_destino>.target.wants.
Após concluir a configuração do destino, recarregue a configuração do systemd para disponibilizar o novo destino:
systemctl daemon-reload
As seções a seguir abordam tópicos avançados para administradores do sistema. Para obter uma documentação ainda mais avançada do systemd, consulte a série de Lennart Pöttering sobre o systemd para administradores em http://0pointer.de/blog/projects.
A Seção 11.6.6, “Depurando serviços” explica como ver mensagens de registro de determinado serviço. No entanto, a exibição de mensagens de registro não se restringe a registros de serviços. É possível também acessar e consultar as mensagens de registro completas gravadas pelo systemd, o chamado “Diário”. Use o comando systemd-journalctl para exibir as mensagens de registro completas com as entradas antigas. Consulte man 1 systemd-journalctl para ver as opções; por exemplo, aplicação de filtros ou mudança do formato de saída.
É possível gravar o estado atual do systemd em um instantâneo nomeado e mais tarde revertê-lo com o subcomando isolate. Isso é útil para testar serviços ou destinos personalizados, pois permite retornar para um estado definido a qualquer momento. Um instantâneo só fica disponível na sessão atual e é apagado automaticamente na reinicialização. O nome do instantâneo deve terminar com .snapshot.
systemctl snapshot <my_snapshot>.snapshot
systemctl delete <my_snapshot>.snapshot
systemctl show <my_snapshot>.snapshot
systemctl isolate <my_snapshot>.snapshot
Com o systemd, é possível carregar os módulos do kernel automaticamente no momento da inicialização, usando o arquivo de configuração em
/usr/lib/modules-load.d e
/etc/modules-load.d
Para obter mais informações, consulte a página de manual modules-load.d(5).
Em um sistema init tradicional do System V, nem sempre é possível atribuir claramente um processo ao serviço que o gerou. Alguns serviços, como o Apache, geram diversos processos de terceiros (por exemplo, processos CGI ou Java) que, por sua vez, geram mais processos. Isso dificulta ou até impossibilita uma atribuição clara. Além do mais, um serviço pode não terminar corretamente, deixando alguns filhos ativos.
O systemd resolve este problema colocando cada serviço em seu próprio grupo de controle (cgroup). Cgroups são recursos do Kernel que possibilitam agregar processos e todos os seus filhos em grupos hierárquicos organizados. O systemd nomeia cada cgroup de acordo com seu serviço. Como um processo não privilegiado não pode “deixar” seu cgroup, essa é uma forma eficiente de rotular todos os processos gerados por um serviço com o nome do serviço.
Para listar todos os processos pertencentes a um serviço, use o comando systemd-cgls. O resultado será parecido com o seguinte exemplo (resumido):
root # systemd-cgls --no-pager
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
├─user.slice
│ └─user-1000.slice
│ ├─session-102.scope
│ │ ├─12426 gdm-session-worker [pam/gdm-password]
│ │ ├─15831 gdm-session-worker [pam/gdm-password]
│ │ ├─15839 gdm-session-worker [pam/gdm-password]
│ │ ├─15858 /usr/lib/gnome-terminal-server
[...]
└─system.slice
├─systemd-hostnamed.service
│ └─17616 /usr/lib/systemd/systemd-hostnamed
├─cron.service
│ └─1689 /usr/sbin/cron -n
├─ntpd.service
│ └─1328 /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -g -u ntp:ntp -c /etc/ntp.conf
├─postfix.service
│ ├─ 1676 /usr/lib/postfix/master -w
│ ├─ 1679 qmgr -l -t fifo -u
│ └─15590 pickup -l -t fifo -u
├─sshd.service
│ └─1436 /usr/sbin/sshd -D
[...]Consulte o Chapter 8, Kernel Control Groups, System Analysis and Tuning Guide para obter mais informações sobre os cgroups.
Conforme explicado na Seção 11.6.4, “Grupos de controle (cgroups) do Kernel”, nem sempre é possível atribuir um processo a seu processo de serviço pai em um sistema init do System V. Isso dificulta terminar um serviço e todos os seus filhos. Os processos filhos que não forem terminados permanecerão como processos zumbis.
O conceito do systemd de confinar cada serviço em um cgroup possibilita identificar claramente todos os processos filhos de um serviço e, portanto, permite enviar um sinal a cada um desses processos. Use systemctl kill para enviar sinais aos serviços. Para ver uma lista dos sinais disponíveis, consulte man 7 signals.
SIGTERM para um serviço
SIGTERM é o sinal padrão que é enviado.
systemctl kill <my_service>.service
Use a opção -s para especificar o sinal que deve ser enviado.
systemctl kill -s SIGNAL <my_service>.service
Por padrão, o comando kill envia o sinal para todos os processos do cgroup especificado. É possível restringi-lo ao processo control ou main. Este último, por exemplo, é útil para forçar um serviço a recarregar sua configuração enviando SIGHUP:
systemctl kill -s SIGHUP --kill-who=main <my_service>.service
Por padrão, o systemd não é muito verboso. Se um serviço for iniciado com êxito, nenhuma saída será gerada. Em caso de falha, uma breve mensagem de erro será exibida. Porém, o systemctl status oferece os meios de depurar a inicialização e operação de um serviço.
O systemd já vem com um mecanismo de registro (“The Journal” — O Diário) que registra as mensagens do sistema. Isso permite exibir as mensagens de serviço juntamente com as mensagens de status. O comando status funciona de forma parecida com o comando tail e também exibe as mensagens de registro em formatos diferentes, o que faz dele uma poderosa ferramenta de depuração.
Sempre que um serviço falhar ao ser iniciado, use systemctl status <meu_serviço>.service para ver a mensagem detalhada do erro:
root #systemctl start apache2.service Job failed. See system journal and 'systemctl status' for details.root #systemctl status apache2.service Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled) Active: failed (Result: exit-code) since Mon, 04 Jun 2012 16:52:26 +0200; 29s ago Process: 3088 ExecStart=/usr/sbin/start_apache2 -D SYSTEMD -k start (code=exited, status=1/FAILURE) CGroup: name=systemd:/system/apache2.service Jun 04 16:52:26 g144 start_apache2[3088]: httpd2-prefork: Syntax error on line 205 of /etc/apache2/httpd.conf: Syntax error on li...alHost>
O comportamento padrão do subcomando status é exibir as dez últimas mensagens emitidas por um serviço. Para mudar o número de mensagens exibidas, use o parâmetro --lines=n:
systemctl status ntp.service systemctl --lines=20 status ntp.service
Para exibir um “fluxo ao vivo” das mensagens de serviço, use a opção --follow, que funciona como o tail :
-f
systemctl --follow status ntp.service
O parâmetro --output=modo permite mudar o formato de saída das mensagens de serviço. Os modos mais importantes disponíveis são:
short
O formato padrão. Mostra as mensagens de registro com uma marcação de horário legível.
verbose
Saída completa com todos os campos.
cat
Saída resumida sem marcações de horário.
Para obter mais informações sobre o systemd, consulte os seguintes recursos online:
Lennart Pöttering, um dos criadores do systemd, escreveu uma série de entradas de blog (13 até o fechamento deste capítulo). Encontre-os em http://0pointer.de/blog/projects.
systemdhttp://www.h-online.com/open/features/Control-Centre-The-systemd-Linux-init-system-1565543.html
http://www.h-online.com/open/features/Booting-up-Tools-and-tips-for-systemd-1570630.html