Gerenciador de serviços systemd

O Systemd é um gerenciador de sistema e serviços para Linux, possui uma forte capacidade de paralelização, utiliza ativação por sockets e D-Bus para iniciar os serviços, disparo sob demanda dos daemons, e monitoramento dos processos por cgroups.

O systemd é criação de Lennart Poettering, que é funcionário da Red Hat e contribuidor do Fedora. Daí muita gente atribui o systemd à Red Hat, no que se enganam: embora hoje a Red Hat tenha inúmeros projetos com o systemd no centro, a ideia original e o esforço original foram feitos por Lennart em seu próprio tempo e não como um projeto da empresa.

A ideia do systemd parte das inúmeras funcionalidades que o kernel Linux oferece, que são incríveis e extremamente avançadas mas que acabam não sendo usadas, a não ser em ambientes muito específicos, porque não há infra-estrutura comum no espaço de usuário para fazer uso da funcionalidade e disponibilizá-la para o resto do sistema.

Uma das primeiras funcionalidades trazidas pelo systemd foi exatamente o uso de Control Groups, cada serviço iniciado pelo systemd é dentro de um cgroup próprio, o que significa por exemplo que todos os processos criados por aquele serviço podem ser – com certeza – terminados quando o serviço é parado.

Os Control Groups são formas de juntar processos em uma embalagem que permite tratar esse grupo de processos como um todo. Esses grupos podem ser usados por exemplo para limitar que partes do sistema os processos que o compõe podem ver, criando uma visão virtual mais limitada do sistema de arquivos, por exemplo, ou limitando as interfaces de rede que os processos podem ver. Também podem ser usados para tornar o agendamento de tempo das tarefas no processador mais adequado ao sistema, ou impor limites de uso de memória, de operações de I/O e assim por diante.

Além de tudo isso, o uso de cgroups ainda dá ao systemd a capacidade de garantir que não fiquem processos pra trás quando um serviço é paradao, basta terminar todos os processos do control group para que não sobre nenhum.

O systemd dá início e supervisiona todo o sistema e é baseado no conceito de unidades. Uma unidade é composta por um nome e um tipo, e possui um arquivo de configuração correspondente. Portanto, a unidade para um processo servidor httpd (como o Apache, por exemplo) será httpd.service, e seu arquivo de configuração também se chamará httpd.service.

Para listar todos os serviços em execução:

# systemctl -t service

Para ver o status de um serviço:

# systemctl status cups.service

Para ativar um serviço na inicialização:

# systemctl enable cups.service

Para retirar um serviço da inicialização:

# systemctl disable cups.service

Para listar units sendo executadas:

# systemctl 
# systemctl list-units

Para listar units que falharam:

# systemctl --failed

Listar os serviços instalados:

# systemctl list-unit-files

Reiniciar o sistema:

# systemctl reboot

Desliga e encerra o sistema:

# systemctl poweroff

Suspender o sistema:

# systemctl suspend

Colocar o sistema em modo de hibernação:

# systemctl hibernate

Colocar o sistema em modo de suspensão:

# systemctl hybrid-sleep

Referência:
https://wiki.archlinux.org/index.php/Systemd_(Portugu%C3%AAs)