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
有時(shí)候,該命令可能沒(méi)有響應,服務(wù)停不下來(lái)。這時(shí)候就不得不"殺進(jìn)程"了,向正在運行的進(jìn)程發(fā)出
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
之間存在"弱依賴(lài)"關(guān)系,即如果"sshd-keygen.service"啟動(dòng)失敗或停止運行,不影響sshd.service
Continuar a execu??o.
Requires
字段則表示"強依賴(lài)"關(guān)系,即如果該服務(wù)啟動(dòng)失敗或異常退出,那么
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 parametros de ambiente, que podem ser usados para
EnvironmentFile
Leitura de campo.
EnvironmentFile
Campo: Especifica o arquivo de parametros 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 parametros 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 parametros 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.
-
),表示"抑制錯誤",即發(fā)生錯誤的時(shí)候,不影響其他命令的執行。比如,
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: