Tutorial de Introdução ao Systemd: Parte Prática 1. Iniciar o sistema Dois, iniciar o serviço Três, interromper o serviço. Quatro, compreendendo o arquivo de configuração. Cinco, [Unidade] Bloco: Ordem de inicialização e dependências. Seis, [Serviço] Bloco: Comportamento de Início 6.1 Comando de inicialização 6.2 Tipo de inicialização 6.3 Comportamento de Reinício Sete, bloco [Install] Oito, o arquivo de configuração do Target. Nove, reinicie após modificar o arquivo de configuração. Informações do documento
Autor: Ruan Yifeng
Data: 8 de março de 2016
No artigo anterior, eu introduzi o Systemd. Comando principal Hoje vou apresentar como usá-lo para realizar algumas tarefas básicas.
Para os softwares que suportam Systemd, durante a instalação, eles serão automaticamente registrados em
/usr/lib/systemd/system
Adicione um arquivo de configuração ao diretório. Se você deseja que o software inicie automaticamente ao ligar o computador, execute o comando abaixo (para
httpd.service
Por exemplo).
$ sudo systemctl enable httpd
O comando acima é equivalente a em
/etc/systemd/system
Adicionar um link simbólico ao diretório, apontando para
/usr/lib/systemd/system
dentro
httpd.service
Arquivo. Isso acontece porque, ao ligar,
Systemd
Apenas execute.
/etc/systemd/system
Os arquivos de configuração no diretório. Isso também significa que, se o arquivo de configuração modificado for colocado nesse diretório, será possível sobrescrever a configuração original.
Após configurar a inicialização automática, o software não será iniciado imediatamente, deve-se aguardar a próxima inicialização. Se você deseja executar o software agora, deve executar.
systemctl
start
Comando. Após configurar a inicialização automática, o software não será iniciado imediatamente, deve-se aguardar a próxima inicialização. Se você deseja executar o software agora, deve executar
systemctl start
Comando.
x
$ sudo systemctl start httpd
Após a execução do comando acima, pode haver falha ao iniciar, portanto, é necessário usar
systemctl
status
Comando para verificar o status do serviço.
x
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since 金 2014-12-05 12:18:22 JST; 7min ago
Main PID: 4349 (httpd)
Status: "Total requests: 1; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4349 /usr/sbin/httpd -DFOREGROUND
├─4350 /usr/sbin/httpd -DFOREGROUND
├─4351 /usr/sbin/httpd -DFOREGROUND
├─4352 /usr/sbin/httpd -DFOREGROUND
├─4353 /usr/sbin/httpd -DFOREGROUND
└─4354 /usr/sbin/httpd -DFOREGROUND
12月 05 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
O significado do resultado acima é o seguinte.
Linha Loaded: Localização do arquivo de configuração, se deve ser configurado para iniciar com o sistema. Linha Ativa: indica que está em execução. Linha do PID principal: ID do processo principal Status: O estado atual do software fornecido pela própria aplicação (neste caso, httpd). Bloco CGroup: Todos os subprocessos da aplicação Bloco de logs: Logs da aplicação
Para encerrar o serviço em execução, é necessário executar.
systemctl stop
Comando.
xxxxxxxxxx
$ sudo systemctl stop httpd.service
有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出
kill
Sinal.
xxxxxxxxxx
$ sudo systemctl kill httpd.service
Além disso, é necessário executar a reinicialização do serviço.
systemctl restart
Comando.
x
$ sudo systemctl restart httpd.service
Como um serviço é iniciado, depende completamente do seu arquivo de configuração. Abaixo, vamos ver quais conteúdos estão presentes no arquivo de configuração.
Como mencionado anteriormente, o arquivo de configuração é principalmente colocado em
/usr/lib/systemd/system
Índice, também pode estar em
/etc/systemd/system
Índice. Após encontrar o arquivo de configuração, basta abri-lo com um editor de texto.
systemctl
cat
O comando pode ser usado para ver o arquivo de configuração, abaixo como
sshd.service
O arquivo serve como um exemplo, sua função é iniciar um servidor SSH para que outros usuários possam fazer login via SSH.
xxxxxxxxxx
$ systemctl cat sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
Type=simple
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
Pode-se ver que o arquivo de configuração é dividido em vários blocos, cada um contendo várias pares de chave-valor.
A seguir, explicarei o conteúdo de cada bloco.
Unit
do bloco
Description
O campo fornece uma descrição simples do serviço atual.
Documentation
O campo fornece a localização do documento. As configurações seguintes são a ordem de inicialização e as dependências, o que é bastante importante.
After
Campo: indica senetwork.target
ousshd-keygen.service
Precisa ser iniciado, entãosshd.service
Deve ser iniciado após eles.
Correspondentemente, há um.
Before
campo, definição
sshd.service
Deve ser iniciado antes de quais serviços. Note que,
After
e
Before
O campo envolve apenas a ordem de inicialização, sem relação de dependência.
Por exemplo, uma aplicação web precisa de um banco de dados PostgreSQL para armazenar dados. No arquivo de configuração, ela apenas define que deve iniciar após o PostgreSQL, mas não define a dependência do PostgreSQL. Após a implantação, por algum motivo, o PostgreSQL precisa ser reiniciado e, durante o período em que o serviço está parado, essa aplicação web não conseguirá estabelecer a conexão com o banco de dados. Para definir a relação de dependência, é necessário usar
Wants
campo e
Requires
Campo.
Wants
Campo: Representasshd.service
comsshd-keygen.service
之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响sshd.service
Continuar a execução.
Requires
字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么
sshd.service
Também deve sair.
Atenção,
Wants
campo e
Requires
Os campos envolvem apenas relações de dependência, sem relação com a ordem de inicialização; por padrão, eles são iniciados simultaneamente.
Service
Como definir um bloco para iniciar o serviço atual.
Muitos softwares possuem seus próprios arquivos de parâmetros de ambiente, que podem ser usados para
EnvironmentFile
Leitura de campo.
EnvironmentFile
Campo: Especifica o arquivo de parâmetros do ambiente atual do serviço. O conteúdo interno desse arquivokey=value
Par de chave-valor, pode ser usado.$key
na forma, obter no arquivo de configuração atual.
No exemplo acima, o arquivo de parâmetros de ambiente do sshd é
/etc/sysconfig/sshd
Os campos mais importantes no arquivo de configuração são
ExecStart
。
ExecStart
Campo: define o comando a ser executado ao iniciar o processo.
No exemplo acima, iniciar.
sshd
o comando executado é
/usr/sbin/sshd -D
$OPTIONS
entre as variáveis
$OPTIONS
De onde vem.
EnvironmentFile
O arquivo de parâmetros de ambiente especificado pelo campo. Existem também outros campos que têm uma função semelhante.
ExecReload
Campo: Comando executado ao reiniciar o serviço
ExecStop
Campo: Comando executado ao parar o serviço.
ExecStartPre
Campo: Comando a ser executado antes de iniciar o serviço
ExecStartPost
Campo: Comando a ser executado após o início do serviço.
ExecStopPost
Campo: Comando a ser executado após a interrupção do serviço
Por favor, veja o exemplo abaixo.
xxxxxxxxxx
[Service]
ExecStart=/bin/echo execstart1
ExecStart=
ExecStart=/bin/echo execstart2
ExecStartPost=/bin/echo post1
ExecStartPost=/bin/echo post2
O arquivo de configuração acima, na segunda linha.
ExecStart
Defina como valor nulo, igual a cancelar a configuração da primeira linha, o resultado da execução é o seguinte.
xxxxxxxxxx
execstart2
post1
post2
Antes de todas as configurações de inicialização, pode-se adicionar um hífen.
-
),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,
EnvironmentFile=-/etc/sysconfig/sshd
(Observe o hífen após o sinal de igual), o que indica que mesmo que.
/etc/sysconfig/sshd
O arquivo não existe e não lançará erro.
Type
Definição do campo tipo de inicialização. Os valores que podem ser definidos são os seguintes.
simples (valor padrão):
ExecStart
O processo iniciado pelo campo é o processo principal.forking:
ExecStart
O campo será preenchido comfork()
O processo será iniciado dessa forma, nesse momento o processo pai será encerrado e o processo filho se tornará o processo principal.oneshot: semelhante a
simple
mas executa apenas uma vez, o Systemd aguardará sua conclusão antes de iniciar outros serviços.dbus: semelhante a
simple
mas irá iniciar após aguardar o sinal D-Busnotificar: semelhante a
simple
Após o término da inicialização, um sinal de notificação será enviado, e então o Systemd iniciará outros serviços.ocioso: semelhante a
simple
No entanto, será necessário esperar até que outras tarefas sejam concluídas antes de iniciar este serviço. Uma das situações de uso é para garantir que a saída deste serviço não se misture com a saída de outros serviços.
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off
[Install]
WantedBy=multi-user.target
No arquivo de configuração acima, defina o tipo de inicialização como
oneshot
Isso indica que este serviço só precisa ser executado uma vez, não precisa funcionar a longo prazo. Se for encerrado e você quiser reabri-lo em algum momento no futuro, o arquivo de configuração deve ser modificado da seguinte forma.
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off start
ExecStop=/usr/bin/touchpad-off stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
No arquivo de configuração acima,
RemainAfterExit
Campo definido como
yes
, indicando que, após a saída do processo, o serviço continua em execução. Assim, uma vez que se usa
systemctl
stop
Comando para parar o serviço.
ExecStop
O comando especificado será executado, reativando o touchpad.
Service
O bloco possui alguns campos que definem o comportamento de reinicialização.
KillMode
Campo: Definir como o Systemd deve parar o serviço sshd.
No exemplo acima, vamos
KillMode
Definir como
process
Isso indica que apenas o processo principal deve ser interrompido, sem parar nenhum subprocesso do sshd, ou seja, as sessões SSH abertas pelos subprocessos ainda permanecem conectadas. Essa configuração não é muito comum, mas é importante para o sshd; caso contrário, ao parar o serviço, você também encerraria a sessão SSH que abriu.
KillMode
Os valores que podem ser configurados para o campo são os seguintes.
grupo de controle (valor padrão): todos os subprocessos dentro do grupo de controle atual serão encerrados.
processo: matar apenas o processo principal
misturado: O processo principal receberá o sinal SIGTERM, enquanto o subprocesso receberá o sinal SIGKILL.
nenhum: Nenhum processo será encerrado, apenas o comando de parar do serviço será executado.
A seguir é
Restart
Campo.
Restart
Campo: define a forma como o Systemd reinicia após a saída do sshd.
No exemplo acima,
Restart
Definir como
on-failure
Qualquer falha inesperada fará com que o sshd seja reiniciado. Se o sshd parar normalmente (por exemplo, executando
systemctl
stop
Comando), ele não reiniciará.
Restart
Os valores que podem ser configurados para o campo são os seguintes.
não (valor padrão): não reinicia após sair
on-success: Somente reiniciará quando a saída for normal (código de saída 0).
on-failure: reiniciará apenas em caso de saída anormal (código de saída diferente de 0), incluindo término por sinal e timeout.
on-abnormal: Somente será reiniciado em caso de término do sinal e timeout.
on-abort: reiniciará apenas quando receber um sinal de término não capturado.
on-watchdog: reiniciar somente após tempo limite de saída.
Sempre: Não importa qual seja a razão para sair, sempre reinicie.
Para o daemon, recomenda-se definir como
on-failure
Para aqueles serviços que permitem saídas com erros, pode-se definir como
on-abnormal
。
Finalmente é
RestartSec
Campo.
RestartSec
Campo: indica o número de segundos que o Systemd deve aguardar antes de reiniciar o serviço. No exemplo acima, está definido para aguardar 42 segundos.
Install
Bloco, defina como instalar este arquivo de configuração, ou seja, como configurá-lo para iniciar automaticamente ao ligar o computador.
WantedBy
Campo: indica o Target onde este serviço está localizado.
Target
O significado é grupo de serviços, que representa um conjunto de serviços.
WantedBy=multi-user.target
refere-se a que o Target onde o sshd está localizado é
multi-user.target
Essa configuração é muito importante, pois a execução
systemctl
enable sshd.service
Quando se trata de comandos,
sshd.service
um link simbólico, será colocado em
/etc/systemd/system
Abaixo do índice.
multi-user.target.wants
Dentro do subdiretório. O Systemd tem um Target de inicialização padrão.
xxxxxxxxxx
$ systemctl get-default
multi-user.target
O resultado acima indica que o Target de inicialização padrão é
multi-user.target
Todos os serviços neste grupo serão iniciados automaticamente. É por isso que
systemctl
enable
A razão pela qual o comando pode configurar o início automático é ao usar o Target.
systemctl
list-dependencies
ordens e
systemctl isolate
Os comandos também são muito úteis.
xxxxxxxxxx
# Verifique todos os serviços incluídos em multi-user.target
$ systemctl list-dependencies multi-user.target
# Mudar para outro alvo
# shutdown.target é o estado de desligamento.
$ sudo systemctl isolate shutdown.target
Em geral, há dois tipos comuns de Target: um é
multi-user.target
, indica o estado do comando de linha para múltiplos usuários; o outro é
graphical.target
indica o estado do usuário gráfico, que depende de
multi-user.target
O documento oficial tem uma imagem muito clara.
Gráfico de dependências do Target
。
O Target também tem seu próprio arquivo de configuração.
xxxxxxxxxx
$ systemctl cat multi-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
Atenção, o arquivo de configuração do Target não contém o comando de inicialização. Os principais campos no resultado acima têm os seguintes significados.
Requires
Campo: Requisitosbasic.target
Executar juntos.
Conflicts
Campo: Campo de conflito. Serescue.service
ourescue.target
Executando,multi-user.target
Não pode ser executado, e vice-versa.
After
: indicarmulti-user.target
embasic.target
、rescue.service
、rescue.target
Depois de iniciar, se eles tiverem algo para iniciar.
AllowIsolate
Permitir o usosystemctl isolate
Comando para mudar paramulti-user.target
。
Após modificar o arquivo de configuração, é necessário recarregar o arquivo de configuração e, em seguida, reiniciar os serviços relacionados.
x
# Recarregar o arquivo de configuração
$ sudo systemctl daemon-reload
# Reiniciar serviços relacionados
$ sudo systemctl restart foobar
(Fim)
Declaração de direitos autorais: Reprodução livre - Não comercial - Não derivado - Manter atribuição ( Licença Creative Commons 3.0 )
Data de publicação: 8 de março de 2016
Você usou recentemente: