Service Management em Systemd
Abrange workflows systemctl para iniciar, ativar, monitorar e personalizar serviços systemd.
Os serviços em um sistema Oracle Linux são gerenciados pelo comando systemctl subcommand.
Exemplos de subcomandos são enable, disable, stop, start, restart, reload e status.
Para obter mais informações, consulte a página do manual systemctl(1).
Iniciando e Interrompendo Serviços
Mostra os comandos systemctl start e systemctl stop e explica como as alterações de estado persistem.
Para iniciar um serviço, use o comando systemctl start:
sudo systemctl start sshd
Para interromper um serviço, use o comando systemctl stop:
sudo systemctl stop sshd
A alteração do estado de um serviço só dura enquanto o sistema permanece no mesmo estado.
Se você interromper um serviço e, em seguida, alterar o destino de estado do sistema para um em que o serviço esteja configurado para ser executado (por exemplo, reinicializando o sistema), o serviço será reiniciado. Da mesma forma, iniciar um serviço não permite que o serviço seja iniciado após uma reinicialização. Consulte Ativando e Desativando Serviços.
Ativando e Desativando Serviços
Explica como ativar, desativar, mascarar e desmascarar serviços para que eles sejam iniciados (ou permaneçam parados) nas reinicializações.
Você pode usar o comando systemctl para ativar ou desativar um serviço do início quando o sistema for inicializado, por exemplo:
sudo systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
O comando enable ativa um serviço criando um link simbólico para o destino de estado do sistema de nível mais baixo no qual o serviço é iniciado. No exemplo anterior, o comando cria o link simbólico httpd.service para o destino multi-user.
Para iniciar o serviço ao mesmo tempo em que você o ativa, inclua a opção --now no comando. Por exemplo:
sudo systemctl enable --now httpdA desativação de um serviço remove o link simbólico:
sudo systemctl disable httpd
Removed /etc/systemd/system/multi-user.target.wants/httpd.service.
Para verificar se um serviço está ativado, use o subcomando is-enabled, conforme mostrado nos seguintes exemplos:
systemctl is-enabled httpd
disabled
systemctl is-enabled sshd
enabled
Depois de executar o comando systemctl disable, o serviço ainda pode ser iniciado ou interrompido por contas de usuário, scripts e outros processos.
No entanto, se você precisar garantir que o serviço não possa ser iniciado inadvertidamente, por exemplo, por um serviço em conflito, use o comando systemctl mask da seguinte forma:
sudo systemctl mask httpd
Created symlink from '/etc/systemd/system/multi-user.target.wants/httpd.service' to '/dev/null'
O comando mask define a referência de serviço como /dev/null. Se você tentar iniciar um serviço que foi mascarado, receberá um erro conforme mostrado no seguinte exemplo:
sudo systemctl start httpd
Failed to start httpd.service: Unit is masked.
Para revincular a referência de serviço de volta ao arquivo de configuração da unidade de serviço correspondente, use o comando systemctl unmask:
sudo systemctl unmask httpd
Para obter mais informações, consulte a página do manual systemctl(1).
Exibindo o Status dos Serviços
Detalha os comandos systemctl is-active e status para verificar a integridade do serviço e os grupos de controle.
Para verificar se um serviço está em execução, use o subcomando is-active. A saída seria ativa ou inativa, conforme mostrado nos seguintes exemplos:
systemctl is-active httpd
active
systemctl is-active sshd
inactive
O subcomando status fornece um resumo detalhado do status de um serviço, incluindo uma árvore que exibe as tarefas no grupo de controle (CGroup) que o serviço implementa:
systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since ...
Docs: man:httpd.service(8)
Main PID: 11832 (httpd)
Status: "Started, listening on: port 80"
Tasks: 213 (limit: 26213)
Memory: 32.5M
CGroup: /system.slice/httpd.service
├─11832 /usr/sbin/httpd -DFOREGROUND
├─11833 /usr/sbin/httpd -DFOREGROUND
├─11834 /usr/sbin/httpd -DFOREGROUND
├─11835 /usr/sbin/httpd -DFOREGROUND
└─11836 /usr/sbin/httpd -DFOREGROUND
Jul 17 00:14:32 Unknown systemd[1]: Starting The Apache HTTP Server...
Jul 17 00:14:32 Unknown httpd[11832]: Server configured, listening on: port 80
Jul 17 00:14:32 Unknown systemd[1]: Started The Apache HTTP Server.
cgroup é um conjunto de processos que são vinculados para que você possa controlar seu acesso aos recursos do sistema. No exemplo, o cgroup para o serviço httpd é httpd.service, que está no segmento system.
As fatias dividem o cgroups em um sistema em categorias diferentes. Para exibir a hierarquia de segmentos e cgroup, utilize o comando systemd-cgls:
systemd-cgls
Control group /:
-.slice
├─user.slice
│ └─user-1000.slice
│ ├─user@1000.service
│ │ └─init.scope
│ │ ├─6488 /usr/lib/systemd/systemd --user
│ │ └─6492 (sd-pam)
│ └─session-7.scope
│ ├─6484 sshd: root [priv]
│ ├─6498 sshd: root@pts/0
│ ├─6499 -bash
│ ├─6524 sudo systemd-cgls
│ ├─6526 systemd-cgls
│ └─6527 less
├─init.scope
│ └─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 16
└─system.slice
├─rngd.service
│ └─1266 /sbin/rngd -f --fill-watermark=0
├─irqbalance.service
│ └─1247 /usr/sbin/irqbalance --foreground
├─libstoragemgmt.service
│ └─1201 /usr/bin/lsmd -d
├─systemd-udevd.service
│ └─1060 /usr/lib/systemd/systemd-udevd
├─polkit.service
│ └─1241 /usr/lib/polkit-1/polkitd --no-debug
├─chronyd.service
│ └─1249 /usr/sbin/chronyd
├─auditd.service
│ ├─1152 /sbin/auditd
│ └─1154 /usr/sbin/sedispatch
├─tuned.service
│ └─1382 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
├─systemd-journald.service
│ └─1027 /usr/lib/systemd/systemd-journald
├─atd.service
│ └─1812 /usr/sbin/atd -f
├─sshd.service
│ └─1781 /usr/sbin/sshd
O system.slice contém serviços e outros processos do sistema. O user.slice contém processos do usuário, que são executados em cgroups transitórios chamados escopos.
No exemplo, os processos para o usuário com o ID 1000 estão em execução no escopo session-7.scope no segmento /user.slice/user-1000.slice.
Você pode usar o comando systemctl para limitar a CPU, Entrada/Saída, memória e outros recursos disponíveis para os processos em grupos de serviço e escopo. Consulte Controlando o Acesso a Recursos do Sistema.
Para obter mais informações, consulte as páginas do manual systemctl(1) e systemd-cgls(1). Consulte também Usando o Systemd para Gerenciar Grupos de Controle.
Controlando o Acesso aos Recursos do Sistema
Mostra como usar systemctl set-property e systemd-run para atribuir limites de CPU e memória a serviços e escopos.
Use o comando systemctl para controlar o acesso de um cgroup aos recursos do sistema, por exemplo:
sudo systemctl [--runtime] set-property httpd CPUShares=512 MemoryLimit=1G
CPUShare controla o acesso aos recursos da CPU. Como o valor padrão é 1024, um valor de 512 reduz pela metade o acesso ao tempo de CPU que os processos no cgroup têm. Da mesma forma, MemoryLimit controla a quantidade máxima de memória que o cgroup pode usar.
Não é necessário especificar a extensão .service para o nome de um serviço.
Se você especificar a opção --runtime, a configuração não persistirá nas reinicializações do sistema.
Como alternativa, você pode alterar as definições de recursos de um serviço no cabeçalho [Service] no arquivo de configuração do serviço em /usr/lib/systemd/system. Após editar o arquivo, faça com que systemd recarregue seus arquivos de configuração e reinicie o serviço:
sudo systemctl daemon-reload
sudo systemctl restart service
Você pode executar comandos gerais dentro de escopos e usar systemctl para controlar o acesso que esses cgroups transitórios têm aos recursos do sistema. Para executar um comando dentro de um escopo, use o comando systemd-run:
sudo systemd-run --scope --unit=group_name.scope [--slice=slice_name]
Se não desejar criar o grupo no segmento system padrão, é possível especificar outro segmento ou o nome de um novo segmento. O exemplo a seguir executa um comando chamado mymonitor em mymon.scope sob myslice.slice:
sudo systemd-run --scope --unit=mymon.scope --slice=myslice mymonitor
Running as unit mymon.scope.
Se você não especificar a opção --scope, o grupo de controle será criado como um serviço em vez de como um escopo.
Você pode, então, usar systemctl para controlar o acesso que um escopo tem aos recursos do sistema da mesma forma que para um serviço. No entanto, ao contrário de um serviço, você deve especificar a extensão .scope, por exemplo:
sudo systemctl --runtime set-property mymon.scope CPUShares=256
Para obter mais informações, consulte Usando o Systemd para Gerenciar Grupos de Controle e as páginas manuais systemctl(1), systemd-cgls(1) e systemd.resource-control(5).
Criando um Serviço systemd Baseado em Usuário
Além dos arquivos systemd no âmbito do sistema, o systemd permite criar serviços baseados no usuário que você pode executar em um nível de usuário sem exigir acesso e privilégios root. Esses serviços baseados em usuário estão sob controle do usuário e são configuráveis, independentes dos serviços do sistema.
Veja a seguir alguns recursos distintivos dos serviços systemd baseados no usuário:
- Os serviços
systemdbaseados no usuário são vinculados a uma conta de usuário específica. - Eles são criados no diretório home do usuário associado em
$HOME/.config/systemd/user/. - Depois que esses serviços forem ativados, eles serão iniciados quando o usuário associado fizer log-in. Esse comportamento difere do dos serviços
systemdativados que são iniciados quando o sistema é inicializado.
Esse recurso é especialmente útil ao criar serviços de contêiner Podman. Para obter mais informações sobre o Podman, consulte o Oracle Linux: Podman User's Guide.
Para criar um serviço baseado em usuário:
Alterando Arquivos de Unidade de Serviço systemd
Descreve como substituir arquivos de unidade empacotados e criar snippets drop-in em /etc/systemd/system.
Para alterar a configuração dos serviços systemd, copie os arquivos com as extensões .service, .target, .mount e .socket de /usr/lib/systemd/system para /etc/systemd/system.
Após ter copiado os arquivos, você poderá editar as versões em /etc/systemd/system.
Os arquivos do /etc/systemd/system têm precedência sobre as versões do /usr/lib/systemd/system. Os arquivos no /etc/systemd/system não são substituídos quando você atualiza um pacote que toca em arquivos no /usr/lib/systemd/system.
Para reverter para a configuração padrão do systemd de um serviço específico, você pode renomear ou excluir as cópias no /etc/systemd/system.
Outra abordagem para alterar a configuração de um serviço é criar um arquivo drop-in. Com esta abordagem, você pode preservar a unidade original enquanto altera parâmetros específicos da unidade.
Crie arquivos drop-in em /etc/systemd/system/unit_name.d/, onde o diretório unit_name.d é uma unidade existente, em seguida, dê aos arquivos drop-in uma extensão de arquivo .conf.
Por exemplo: /etc/systemd/system/unit_name.d/name_of_drop-in.conf. systemd lê o arquivo .conf e aplica as configurações à unidade original.
As seções a seguir descrevem as diferentes partes de um arquivo de unidade de serviço que você pode editar e personalizar para um sistema.
Sobre Arquivos da Unidade de Serviço
Os serviços são executados com base em seus arquivos de unidade de serviço correspondentes. Um arquivo de unidade de serviço geralmente contém as seguintes seções, com cada seção tendo suas respectivas opções definidas que determinam como um serviço específico é executado:
-
[Unit] -
Contém informações sobre o serviço.
[UnitType]:-
Contém opções específicas para o tipo de unidade do arquivo. Por exemplo, em um arquivo de unidade de serviço, esta seção é intitulada
[Service]e contém opções específicas para unidades do tipo de serviço, comoExecStartouStandardOutput.Apenas os tipos de unidade que oferecem opções específicas ao tipo têm essa seção.
-
[Install] -
Contém informações de instalação para a unidade específica. As informações nesta seção são usadas pelos comandos systemctl enable e systemctl disable.
Um arquivo de unidade de serviço pode conter as seguintes configurações para um serviço.
[Unit]
Description=A test service used to develop a service unit file template
[Service]
Type=simple
StandardOutput=journal
ExecStart=/usr/lib/systemd/helloworld.sh
[Install]
WantedBy=default.target
Opções Configuráveis em Arquivos de Unidade de Serviço descreve algumas opções configuradas comumente usadas disponíveis em cada seção. Uma lista completa também está disponível nas páginas de manual systemd.service(5) e systemd.unit(5).
Opções Configuráveis nos Arquivos de Unidade de Serviço
Cada uma das listas a seguir trata de uma seção separada do arquivo de unidade de serviço.
Descrição das Opções na Seção [Unidade]
A lista a seguir fornece uma visão geral das opções configuráveis comumente usadas disponíveis na seção [Unit] do arquivo de unidade de serviço:
-
Description -
Fornece informações sobre o serviço. As informações são exibidas quando você executa o comando
systemctl statusna unidade. -
Documentation -
Contém uma lista separada por espaços de URIs que fazem referência à documentação desta unidade ou à sua configuração.
-
After -
Configura a unidade para ser executada somente depois que as unidades listadas na opção terminarem de ser iniciadas.
No exemplo a seguir, se o arquivo var3.
servicetiver a seguinte entrada, ele só será iniciado depois que as unidadesvar1.serviceevar2.servicetiverem sido iniciadas:After=var1.service var2.service -
Requires -
Configura uma unidade para ter dependências de exigências em outras unidades. Se uma unidade for ativada, as listadas em sua opção
Requirestambém serão ativadas. -
Wants -
Uma versão menos rigorosa da opção
Requires. Por exemplo, uma unidade específica pode ser ativada mesmo que uma das listadas em sua opçãoWantsnão seja iniciada.
Descrição das Opções na Seção [Serviço]
Esta lista a seguir fornece uma visão geral das opções configuráveis comumente usadas disponíveis na seção [Service] de um arquivo de unidade de serviço.
-
Type -
Configura o tipo de inicialização do processo para a unidade de serviço.
Por padrão, o valor desse parâmetro é
simple, o que indica que o processo principal do serviço é o iniciado pelo parâmetroExecStart.Geralmente, se o tipo de um serviço for
simple, a definição poderá ser omitida do arquivo. -
StandardOutput -
Configura como os eventos do serviço são registrados. Por exemplo, considere que um arquivo de unidade de serviço tenha a seguinte entrada:
StandardOutput=journalNo exemplo, o valor
journalindica que os eventos são registrados no diário, que pode ser exibido com o uso do comandojournalctl. -
ExecStart -
Especifica o caminho completo e o comando que inicia o serviço, por exemplo,
/usr/bin/npm start. -
ExecStop -
Especifica os comandos a serem executados para interromper o serviço iniciado por meio do
ExecStart. -
ExecReload -
Especifica os comandos a serem executados para acionar um recarregamento de configuração no serviço.
-
Restart -
Configura se o serviço deve ser reiniciado quando o processo de serviço sair, for interrompido ou quando um timeout for atingido.
Observação
Essa opção não se aplica quando o processo é interrompido corretamente por uma operaçãosystemd, por exemplo, umsystemctl stopousystemctl restart. Nesses casos, o serviço não é reiniciado por esta opção de configuração. -
RemainAfterExit -
Um valor booliano que configura se o serviço deve ser considerado ativo mesmo quando todos os seus processos foram encerrados. O valor padrão é
no.
Descrição das opções na seção [Instalar]
Esta lista a seguir fornece uma visão geral das opções configuráveis comumente usadas disponíveis na seção [Install] do arquivo de unidade de serviço.
-
Alias -
Uma lista de nomes separados por espaço de uma unidade.
No momento da instalação,
systemctl enablecria symlinks desses nomes para o nome do arquivo da unidade.Os aliases só são efetivos quando a unidade é ativada.
-
RequiredBy -
Configura o serviço a ser exigido por outras unidades.
Por exemplo, considere um arquivo de unidade
var1.serviceque tenha a seguinte configuração adicionada a ele:RequiredBy=var2.service var3.serviceQuando
var1.serviceestá ativado,var2.serviceevar3.servicerecebem uma dependênciaRequiresem relação avar1.service. Essa dependência é definida por um link simbólico que é criado na pasta.requiresde cada serviço dependente (var2.serviceevar3.service) que aponta para o arquivo de unidade do sistemavar1.service. -
WantedBy -
Especifica uma lista de unidades às quais será concedida uma dependência
wantsdo serviço cujo arquivo você está editando.Por exemplo, considere um arquivo de unidade
var1.serviceque tenha a seguinte configuração adicionada a ele:WantedBy=var2.service var3.serviceQuando
var1.serviceestá ativado,var2.serviceevar3.servicerecebem uma dependênciaWantsemvar1.service. Essa dependência é definida por um link simbólico que é criado na pasta ".wants" de cada serviço dependente (var2.serviceevar3.service) que aponta para o arquivo de unidade do sistema paravar1.service. -
Also -
Lista as unidades adicionais a serem instaladas ou removidas quando a unidade for instalada ou removida.
-
DefaultInstance -
A opção
DefaultInstancese aplica somente a arquivos de unidade de modelo.Os arquivos de unidade de modelo permitem a criação de várias unidades a partir de um único arquivo de configuração. A opção
DefaultInstanceespecifica a instância para a qual a unidade está ativada se o modelo estiver ativado sem qualquer instância definida explicitamente.
Criando um Arquivo Drop-In de Unidade
Você pode usar o comando systemctl edit para gerar automaticamente um arquivo de unidade systemd ou drop-in para qualquer unidade systemd existente. Você pode usar o arquivo suspenso para substituir a configuração base de uma unidade ou para estender os requisitos de um arquivo de unidade.