3.2. Gerenciamento de serviços de sistema

As versões anteriores do Red Hat Enterprise Linux, que eram distribuídas com SysV init ou Upstart, usavam init scripts localizado no diretório /etc/rc.d/init.d/. Estes scripts init eram tipicamente escritos em Bash, e permitiam ao administrador de sistemas controlar o estado dos serviços e daemons em seu sistema. Começando com o Red Hat Enterprise Linux 7, estes scripts de inicialização foram substituídos por service units.

As unidades de serviço terminam com a extensão do arquivo .service e servem a um propósito similar ao dos scripts de inicialização. Para visualizar, iniciar, parar, reiniciar, ativar ou desativar serviços de sistema, use o comando systemctl como descrito em Comparação do utilitário de serviço com systemctl, Comparação do utilitário chkconfig com systemctl, e mais adiante nesta seção. Os comandos service e chkconfig ainda estão disponíveis no sistema e funcionam como esperado, mas só estão incluídos por razões de compatibilidade e devem ser evitados.

Tabela 3.3. Comparação da utilidade do serviço com o systemctl

serviçosystemctlDescrição

service name start

systemctl start name.service

Inicia um serviço.

service name stop

systemctl stop name.service

Interrompe um serviço.

service name restart

systemctl restart name.service

Recomeça um serviço.

service name condrestart

systemctl try-restart name.service

Reinicia um serviço somente se ele estiver em funcionamento.

service name reload

systemctl reload name.service

Recarregar a configuração.

service name status

systemctl status name.service

systemctl is-active name.service

Verifica se um serviço está funcionando.

service --status-all

systemctl list-units --type service --all

Exibe o status de todos os serviços.

Tabela 3.4. Comparação do utilitário chkconfig com o systemctl

chkconfigsystemctlDescrição

chkconfig name on

systemctl enable name.service

Possibilita um serviço.

chkconfig name off

systemctl disable name.service

Desabilita um serviço.

chkconfig --list name

systemctl status name.service

systemctl is-enabled name.service

Verifica se um serviço está habilitado.

chkconfig --list

systemctl list-unit-files --type service

Relaciona todos os serviços e verifica se eles estão habilitados.

chkconfig --list

systemctl list-dependencies --after

Lista os serviços que são ordenados para começar antes da unidade especificada.

chkconfig --list

systemctl list-dependencies --before

Lista os serviços que são encomendados para começar após a unidade especificada.

Especificação de unidades de serviço

Para maior clareza, todos os exemplos de comando no restante desta seção usam nomes completos de unidades com a extensão .service, por exemplo:

# systemctl stop nfs-server.service

Entretanto, a extensão do arquivo pode ser omitida, caso em que o utilitário systemctl assume que o argumento é uma unidade de serviço. O seguinte comando é equivalente ao acima:

# systemctl stop nfs-server

Além disso, algumas unidades têm nomes falsos. Esses nomes podem ter nomes mais curtos do que as unidades, que podem ser usados em vez dos nomes reais das unidades. Para encontrar todos os pseudônimos que podem ser usados para uma unidade em particular, use:

# systemctl show nfs-server.service -p Nomes

Comportamento do systemctl em um ambiente chroot

Se você mudar o diretório raiz usando o comando chroot, a maioria dos comandos systemctl se recusam a executar qualquer ação. A razão para isto é que o processo systemd e o usuário que usou o comando chroot não têm a mesma visão do sistema de arquivos. Isto acontece, por exemplo, quando systemctl é invocado a partir de um arquivo kickstart.

A exceção a isto são os comandos de arquivo de unidade como os comandos systemctl enable e systemctl disable. Estes comandos não precisam de um sistema em execução e não afetam os processos em execução, mas afetam os arquivos de unidade. Portanto, você pode executar estes comandos mesmo em ambiente chroot. Por exemplo, para habilitar o serviço httpd em um sistema sob o diretório /srv/website1/:

# chroot /srv/website1
# systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service, pointing to /usr/lib/systemd/system/httpd.service.

3.2.1. Serviços de listagem

Para listar todas as unidades de serviço atualmente carregadas, digite o seguinte em um prompt de shell:

systemctl list-units --type service

Para cada arquivo de unidade de serviço, este comando exibe seu nome completo (UNIT) seguido de uma nota se o arquivo da unidade foi carregado (LOAD), seu alto nível (ACTIVE) e baixo nível (SUB) estado de ativação do arquivo da unidade, e uma breve descrição (DESCRIPTION).

Por padrão, o comando systemctl list-units exibe apenas as unidades ativas. Se você quiser listar todas as unidades carregadas independentemente de seu estado, execute este comando com a opção de linha de comando --all ou -a:

systemctl list-units --type service --all

Você também pode listar todas as unidades de serviço disponíveis para ver se elas estão habilitadas. Para fazer isso, digite:

systemctl list-unit-files --type service

Para cada unidade de serviço, este comando exibe seu nome completo (UNIT FILE) seguido de informações se a unidade de serviço está habilitada ou não (STATE). Para informações sobre como determinar o status de cada unidade de serviço, consulte Exibindo o status do serviço.

Exemplo 3.1. Serviços de listagem

Para listar todas as unidades de serviço atualmente carregadas, execute o seguinte comando:

$ systemctl list-units --type 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-vmcore.service            loaded active exited  Harvest vmcores for ABRT
abrt-xorg.service              loaded active running ABRT Xorg log watcher
abrtd.service                  loaded active running ABRT Automated Bug Reporting Tool
…​
systemd-vconsole-setup.service loaded active exited  Setup Virtual Console
tog-pegasus.service            loaded active running OpenPegasus CIM Server

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

46 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'

Para listar todos os arquivos da unidade de serviço instalada para determinar se eles estão habilitados, digite:

$ systemctl list-unit-files --type service
UNIT FILE                                   STATE
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-vmcore.service                         enabled
abrt-xorg.service                           enabled
abrtd.service                               enabled
…​
wpa_supplicant.service                      disabled
ypbind.service                              disabled

208 unit files listed.