O systemd é um gerenciador de sistema e serviço para sistemas operacionais Linux, desenvolvido como um substituto para o System V init e o Upstart. É o gerenciador de sistema padrão na maioria das distribuições Linux modernas.
Ele atua como um init system, substituindo os antigos sistemas init como o SysVinit, e oferece uma série de funcionalidades que visam otimizar e simplificar o gerenciamento do sistema.
Foi desenvolvido por Lennart Poettering e Kay Sievers, ambos da Red Hat, com o objetivo de criar um sistema de inicialização mais eficiente, escalável e modular.
A ideia era unificar as diversas ferramentas e scripts de inicialização existentes em uma única solução, simplificando a configuração e o gerenciamento do sistema. Deveria ser mais rápido, mais confiável e mais flexível do que os gerenciadores de sistema anteriores.
Ao iniciar o sistema, o systemd - funcionando como daemon - assume o controle e inicia os demais serviços de forma organizada e eficiente, utilizando um sistema de dependências que garantam que os serviços ser iniciados na ordem correta, evitando conflitos e falhas. Também fornece uma interface para controlar e monitorar serviços.
Ele permite que diversos serviços sejam iniciados simultaneamente, acelerando o processo de boot, utiizando sockets e o protocolo D-Bus para comunicação entre serviços, proporcionando uma maior flexibilidade e eficiência. Oferece comandos intuitivos para “iniciar”, “parar”, “reiniciar” e “verificar” o status de serviços:
Para reiniciar um serviço:
# systemctl restart serviço
ou
$ sudo systemctl restart serviço
Para habilitar um serviço:
# systemctl enable serviço
ou
$ sudo systemctl enable serviço
Para habilitar um serviço imediatamente:
# systemctl enable --now serviço
ou
$ sudo systemctl enable --now serviço
Para desailitar um serviço imediatamente:
# systemctl disable serviço
ou
$ sudo systemctl disable serviço
Para ver o arquivo systemd de um serviço:
# systemctl cat serviço
ou
$ sudo systemctl cat serviço
Para reiniciaciar o systemd:
# systemctl reboot
ou
$ sudo systemctl reboot
Para desligar o systemd:
# systemctl poweroff
ou
$ sudo poweroff
Para ver o log do systemd:
# journalctl -f
ou
$ sudo journalctl -f
Para ver o logo de um serviço:
# journalctl -u serviço
ou
$ sudo journalctl -u serviço
Para ver o log num intervalo de tempo:
# journalctl --since “2024-08-29” --until “2024-08-31”
ou
S sudo journalctl --since “2024-08-29” --until “2024-08-31”
Para ver o log num intervalo de horas:
# journalctl --since “3 hours ago”
ou
$ sudo journalctl --since “3 hours ago”
Os comandos “service” e “systemctl” foram projetados para trabalhar com sistemas de inicialização distintos, mas oferecem funcionalidades sobrepostas para auxiliar na transição entre eles. É fundamental entender as diferenças para gerenciar eficazmente os serviços.
A principal diferença entre “service” e "systemctl" é pertencerem a diferentes sistemas de inicialização. O primeiro, ao SysVinit (System V Init), trabalhando com os arquivos do diretório /etc/init.d; o segundo, ao systemd, com os arquivos em /lib/systemd.
O Systemd inicia serviços em paralelo em vez de serialmente, com tempo de inicialização é mais rápido que do SysVinit. Também oferece um controle um pouco mais sofisticado de daemons, por meio de uma interface de linha de comando (CLI).
Controvérsias
O Systemd é realmente controverso por várias razões. Primeiro, muitas pessoas acham que o systemd não respeita a filosofia Unix, é muito complexo e monolítico, dificultando a solução de problemas.
Segundo, algumas críticas ao systemd afirmam que o systemd não é apenas um sistema init, mas também assume muitas funções. Por exemplo, o systemd tenta gerenciar rede, cron, fstab, syslog, etc. Isso significa que o systemd não é um programa com um uso singular, mas tem múltiplas funções.
Finalmente, o systemd é criticado porque seu arquivo de log não é baseado em texto como os logs do Unix e Linux em comum. Em vez disso, é um arquivo de log binário.
Fontes: links no texto