O que é o systemd?

O systemd é um sistema de gerenciamento de Daemons, ele e responsável por escolher os drives que serão iniciados no boot, habilitar a sua conexão de rede, iniciar serviços do sistemas e a sua interface gráfico por exemplo.

O systemd é bastante inteligente e consegue acelerar bastante o boot do sistema, ele consegue ativar os serviços sobre demanda aumentando bastante a velocidade do boot e o consumo de recursos do sistema de forma mais inteligente.

Esta ativação de serviços inteligente e chamada de ativação via socket, por exemplo o syslog (daemon de logs, dáh) ele precisa ser iniciado no inicio do sistema pois vários outros daemon dependem dele para os logs de error, avisos e informações sejam registradas.

Agora o daemon do CUPS ou o SSH não precisam ser iniciado logo no inicio do boot podem ser iniciados posteriormente, quando sugir a necessidade por exemplo o CUPS pode ser iniciado no momento que um job for enviado para a fila de impressão, então o systemd tem inteligência para lidar com isso e realizar o start desse serviço nesse momento, economizando um boot de recursos do sistema (CPU, memória, I\O e etc).

Arquitetura do systemd

Os arquivos de configuração do systemd (chamados de units) ficam espalhados por vários lugares do SO. De acordo com a sua man (que diga-se de passagem é uma das man's mais bem escritos que já vi). Seus arquivos de configuração ficam em:

Systemd diretóriosNão recomendo que mexam nos /run/systemd/system/* e /lib/systemd/system/* são diretórios meio complexos de recuperar em caso as coisas fiquem feias.

No /etc/systemd/system/* temos os arquivos de configuração, aonde ficam os "scripts de inicialização", eles podem ser dos seguintes tipos:

  • service
  • socket
  • device
  • mount
  • automount
  • swap
  • timer
  • snapshot
  • target

Não foi entrar em detalhes sobre todos os tipos, mas vamos pegar os arquivos do tipo mount por exemplo.

Temos dois units o var-run.mount e o sys-kernel-debug.mount o primeiro e responsável por montar o diretório /var/run e o segundo monta o /sys/kernel/debug (opa então o systemd sobreescreve o /etc/fstab??? Já você vai entender!)

Vamos ver o unit var-run.mount,

[Mount]
 What=tmpfs
 Where=/var/run
 Type=tmpfs
 Options=mode=755,nosuid,nodev,noexec

A linha what diz o que é, where informa aonde está, o type diz respeito ao filesystem e o options as opções de montagem (agora sim fico fácil entender como ele vai ser montando).

Vamos ver por exemplo como /home vai ser montado para as coisas ficarem mais claras!

 [Mount]
 What=/dev/sda3
 Where=/home
 Type=ext4
 Options=noatime

Então a minha partição /dev/sda3 será montada no /home do tipo ext4 com a opção noatime.

Só que o systemd é um pouco mais esperto que o fstab, se linha [Mount] for alterada para [Automount] ele irá montar a minha /dev/sda3 somente quando algum outro daemon ou processo ou socket precisar acessar a /home/ entendeu agora por que ele consegue trabalhar com o gerenciamento de daemons sobre demanda?

Como usar?

Agora segue uma lista de comandos para começar já a usar os poderes do seu systemd :)

Listar serviços em execução:

# systemctl -t service

Parar serviços:

# systemctl stop iptables.service

Iniciar serviços:

# systemctl start httpd.service

Desativar serviços:

# systemctl disable sendmail.service

Ativar serviços:

# systemctl enable crond.service

Conferir se serviços estão ativos ou não:

# systemctl is-enabled iptables.service

Velocidade do tempo de boot

# systemd-analyze

Ver a velocidade que um unit leva para iniciar

# systemd-analyze nome

Por exemplo

# systemd-analyze blame

Bom já tá bom por hoje, no próximo post vamos explorar mais os outros tipos de units.

[]'s