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.
serviço | systemctl | Descrição |
---|---|---|
|
| Inicia um serviço. |
|
| Interrompe um serviço. |
|
| Recomeça um serviço. |
|
| Reinicia um serviço somente se ele estiver em funcionamento. |
|
| Recarregar a configuração. |
|
| Verifica se um serviço está funcionando. |
|
| Exibe o status de todos os serviços. |
chkconfig | systemctl | Descrição |
---|---|---|
|
| Possibilita um serviço. |
|
| Desabilita um serviço. |
|
| Verifica se um serviço está habilitado. |
|
| Relaciona todos os serviços e verifica se eles estão habilitados. |
|
| Lista os serviços que são ordenados para começar antes da unidade especificada. |
|
| 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.