Iniciar e parar serviços Systemd
systemdé a nova maneira de executar serviços no Linux. O systemd tem um sysvinit substituído . O systemd traz tempos de inicialização mais rápidos para o Linux e agora é uma forma padrão de gerenciar serviços Linux. Embora estável, o systemd ainda está evoluindo.
systemd como um sistema init, é usado para gerenciar serviços e daemons que precisam de mudanças de status após o kernel do Linux ter sido inicializado. Pela mudança de status, é aplicado o início, a parada, o recarregamento e o ajuste do estado do serviço.
Primeiro, vamos verificar a versão do systemd atualmente em execução em nosso servidor.
[centos@localhost ~]$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
[centos@localhost ~]$
A partir da versão 7 do CentOS, totalmente atualizada no momento em que este artigo foi escrito, a versão 219 do systemd é a versão estável atual.
Também podemos analisar o último tempo de inicialização do servidor com systemd-analyze
[centos@localhost ~]$ systemd-analyze
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s
[centos@localhost ~]$
Quando os tempos de inicialização do sistema são mais lentos, podemos usar o comando systemd-analyze blame .
[centos@localhost ~]$ systemd-analyze blame
40.882s kdump.service
5.775s NetworkManager-wait-online.service
4.701s plymouth-quit-wait.service
3.586s postfix.service
3.121s systemd-udev-settle.service
2.649s tuned.service
1.848s libvirtd.service
1.437s network.service
875ms packagekit.service
855ms gdm.service
514ms firewalld.service
438ms rsyslog.service
436ms udisks2.service
398ms sshd.service
360ms boot.mount
336ms polkit.service
321ms accounts-daemon.service
Ao trabalhar com o systemd , é importante entender o conceito de unidades .Unitssão os recursos que o sistema sabe interpretar. As unidades são categorizadas em 12 tipos da seguinte forma -
- .service
- .socket
- .device
- .mount
- .automount
- .swap
- .target
- .path
- .timer
- .snapshot
- .slice
- .scope
Na maior parte do tempo, trabalharemos com .service como alvos da unidade. Recomenda-se fazer pesquisas adicionais sobre os outros tipos. Como apenas unidades .service serão aplicadas para iniciar e interromper serviços systemd .
Cada unidade é definida em um arquivo localizado em -
/lib/systemd/system - arquivos de unidade base
/etc/systemd/system - arquivos de unidade modificados iniciados em tempo de execução
Gerenciar serviços com systemctl
Para trabalhar com o systemd , precisaremos nos familiarizar com o comando systemctl . A seguir estão as opções de linha de comando mais comuns para systemctl .
Interruptor | Açao |
---|---|
-t | Valores separados por vírgula de tipos de unidade, como serviço ou soquete |
-uma | Mostra todas as unidades carregadas |
--Estado | Mostra todas as unidades em um estado definido, seja: carga, sub, ativo, inativo, etc. |
-H | Executa a operação remotamente. Especifique o nome do host ou host e usuário separados por @. |
Uso básico do systemctl
systemctl [operation]
example: systemctl --state [servicename.service]
Para uma rápida olhada em todos os serviços em execução em nossa caixa.
[root@localhost rdc]# systemctl -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
blk-availability.service loaded active exited Availability of block devices
bluetooth.service loaded active running Bluetooth service
chronyd.service loaded active running NTP client/server
Parando um serviço
Vamos primeiro parar o serviço bluetooth.
[root@localhost]# systemctl stop bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded inactive dead Bluetooth service
[root@localhost]#
Como podemos ver, o serviço bluetooth agora está inativo.
Para iniciar o serviço bluetooth novamente.
[root@localhost]# systemctl start bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded active running Bluetooth service
[root@localhost]#
Note- Não especificamos bluetooth.service, pois o .service está implícito. É uma boa prática pensar no tipo de unidade anexando o serviço com o qual estamos lidando. Portanto, a partir de agora, usaremos a extensão .service para esclarecer que estamos trabalhando nas operações da unidade de serviço.
As principais ações que podem ser realizadas em um serviço são -
Começar | Inicia o serviço |
Pare | Para um serviço |
recarregar | Recarrega a configuração ativa de um serviço sem interrompê-lo (como kill -HUP em system v init) |
Reiniciar | Inicia e depois interrompe um serviço |
Habilitar | Inicia um serviço no momento da inicialização |
Desabilitar | Impede um serviço de iniciar automaticamente em tempo de execução |
As ações acima são usadas principalmente nos seguintes cenários -
Começar | Para ativar um serviço que foi colocado no estado interrompido. |
Pare | Para encerrar temporariamente um serviço (por exemplo, quando um serviço deve ser interrompido para acessar arquivos bloqueados pelo serviço, como ao atualizar o serviço) |
recarregar | Quando um arquivo de configuração foi editado e queremos aplicar as novas alterações sem interromper o serviço. |
Reiniciar | No mesmo cenário que recarregar, mas o serviço não oferece suporte para recarregar . |
Habilitar | Quando queremos que um serviço desabilitado seja executado no momento da inicialização. |
Desabilitar | Usado principalmente quando há necessidade de interromper um serviço, mas começa na inicialização. |
Para verificar o status de um serviço -
[root@localhost]# systemctl status network.service
network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago
Docs: man:systemd-sysv-generator(8)
Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS)
localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking...
localhost.localdomain network[923]: Bringing up loopback interface: [ OK ]
localhost.localdomain systemd[1]: Started LSB: Bring up/down networking.
[root@localhost]#
Mostre-nos o status atual do serviço de rede . Se quisermos ver todos os serviços relacionados à rede, podemos usar -
[root@localhost]# systemctl --all -t service | grep -i network
network.service loaded active exited LSB: Bring up/
NetworkManager-wait-online.service loaded active exited Network Manager
NetworkManager.service loaded active running Network Manager
ntpd.service loaded inactive dead Network Time
rhel-import-state.service loaded active exited Import network
[root@localhost]#
Para aqueles familiarizados com o sysinitmétodo de gerenciamento de serviços, é importante fazer a transição para o systemd . systemd é a nova maneira de iniciar e parar serviços daemon no Linux.