Nas últimas versões RHEL/CentOS/Fedora a inicialização do sistema e os processos passaram a ser geridos pelo systemd System e pelo Service Manager.
Relembrando, os deamons são processos que correm em segundo plano e que podem efectuar as mais variadas tarefas. Geralmente são inicializados com o sistema e permanecem em execução até serem forçados pelo administrador a terminarem. Por convenção, a maioria dos deamons começam por "d."
Durante muitos anos, o processo (process ID 1) do Linux foi o conhecido init, que tomava a responsabilidade pela activação de quase todos os processos. Os deamons eram inicializados durante o arranque do sistema (boot) através de shell scripts System V e LSB. Em menor número, alguns deamons eram controlados por processos como o initd ou o xinetd, nomeadamente para serviços que podiam receber ligações por parte de clientes e que só nessa circunstância eram activados. Esta implementação tinha insuficiências que foram debeladas pelo systemd. O novo sistema permite melhor performance do arranque, melhor gestão de dependências entre serviços e melhor capacidade de gerir processos em simultâneo.
Com a implementação do systemd, as shell-scipts são apenas usadas para alguns serviços de uso descontinuado mas que ainda são necessários. Como tal, os ficheiros de configuração como os encontrados na directoria /etc/sysconfig
estão a ser substituídos.
O comando de gestão dos processos e serviços do sistema passa a ser o systemctl. Na nova abordagem este programa gere diferentes tipos de objectos que se designam na documentação por units. A lista de units pode ser consultada com o comando:
[root@CentOSCLI ~]# systemctl -t help
Available unit types:
service
socket
target
device
mount
automount
snapshot
timer
swap
path
slice
scope
Os serviços (units) com uma extensão .service representam serviços do sistema, sendo geralmente deamons manipulados com frequência (ex: servidor web).
Os sockets possuem uma extensão .socket que representam sockets IPC (inter-process communication). O controlo deste tipo de unit é passado para um deamon apenas quando é necessário. Não são inicializados durante o arranque. Ou seja,os princípios inerentes ao xinetd são aqui aplicados.
A extensão .path é utilizada quando ocorre uma mudança no file system que suscita a activação de um determinado serviço. Este tipo de implementação foi pensada principalmente para serviços de impressão.
O estado (state) pode ser verificado com o comando:
[root@CentOSCLI ~]# systemctl status sshd
sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
Active: active (running) since Seg 2015-10-12 11:05:40 WEST; 23h ago
Main PID: 1208 (sshd)
CGroup: /system.slice/sshd.service
.......
Vários estados possíveis
Estado | Descrição |
loaded | ficheiro de cofiguração da respectiva unit processado |
active (running) | Em execução |
active (exit) | Configuração efectuada com sucesso |
active (waiting) | Em execução, à espera de um evento |
inactive | Não está em execução |
enabled | Serviço será inicializado com o arranque do sistema |
disabled | Serviço não será inicializado com o arranque do sistema |
static | Só pode ser activado por outra unit. |
(Nota: Não esquecer que com o systemd devemos colocar [systemctl status name] ao contrário de service name status. Ou seja systemctl status sshd e não service sshd status)
O comando systemctl sem argumentos permite listar todas as "units" do sistema. Automaticamente o output é gerado com o comando less.
(outuput suprimido)[root@CentOSCLI ~]# systemctl
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys...t_misc.automount loaded active waiting Arbitrary Executable File Fo
sys-devi...block-sr0.device loaded active plugged VBOX_CD-ROM
sys-devi...et-enp0s3.device loaded active plugged PRO/1000 MT Desktop Adapter
sys-devi...-sda-sda1.device loaded active plugged VBOX_HARDDISK
sys-devi...-sda-sda2.device loaded active plugged LVM PV
sys-devi...block-sda.device loaded active plugged VBOX_HARDDISK
sys-devi...tty-ttyS0.device loaded active plugged /sys/devices/platform/serial
Verificar apenas o estado de units do tipo service:
[root@CentOSCLI ~]# systemctl --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing avahi-daemon.service loaded active running Avahi mDNS/DNS-SD crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message firewalld.service loaded active running firewalld getty@tty1.service loaded active running Getty on tty1 ..... .... (output suprimido)
Analogamente usam-se os comandos systemctl --type=path
ou systemctl --type=socket
para units com extensão .path e extensão .socket
Para verificar se um serviço está activo
[root@CentOSCLI ~]#systemctl is -active sshd
enabled
Para verificar se um serviço é inicilizado no arranque do sistema.
[root@CentOSCLI ~]#systemctl is -enabled sshd
enabled
Verifica o estado das units (tipo service).
[root@CentOSCLI ~]# systemctl list-unit-files --type=service
UNIT FILE STATE
auditd.service enabled
autovt@.service disabled
avahi-daemon.service enabled
blk-availability.service disabled
brandbot.service static
console-getty.service disabled
console-shell.service disabled
...... output suprimido
Lista serviços cuja inicialização falhou: [root@CentOSCLI ~]# systemctl --failed --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
kdump.service loaded failed failed Crash recovery kernel arming Sem parar o serviço, recarrega as configurações [root@CentOSCLI ~]# systemctl reload sshd Pára o serviço
[root@CentOSCLI ~]# systemctl stop sshd
Iniciar o serviço
[root@CentOSCLI ~]# systemctl start sshd
Existem situações em que serviços incompatíveis não devem estar simultaneamente em execução (ex: iptables e firewalld). Pode-se impedir que um administrador arranque um determinado serviço, mascarando o mesmo (mask a service). Basicamente o ficheiro de configuração é modificado de modo a que o serviço não arranque. (manualmente ou durante a inicialização do sistema operativo).
[root@CentOSCLI ~]# systemctl mask network
ln -s '/dev/null' '/etc/systemd/system/network.service'
Para reverter a alteração
[root@CentOSCLI ~]# systemctl unmask network
rm '/etc/systemd/system/network.service'
Tabela de referência com os comandos mais comuns
Tarefa | Comando |
Ver informação detalhada | systemctl status UNIT |
Pára um serviço | systemctl status UNIT |
Iniciar um serviço | systemctl start UNIT |
Reeiniciar um serviço | systemctl restart UNIT |
Recarregar a configuração (não pára o serviço) | systemctl reload UNIT |
Desactivar a possibilide de um serviço ser executado | systemctl mask UNIT |
Activar um serviço para ser executado no arranque do sistema | systemctl enable UNIT |
Desactivar um serviço, impossibilitando-o de ser executado no arranque do sistema | systemctl disable UNIT |
Listar dependências | systemctl list-dependencies UNIT |
Fonte: Ebook: Red Hat 7.0 Trainning - System Administration.