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.