Tutorial de Introdução ao Systemd: Parte Prática

< Systemd 入门教程:命令篇

Tutorial de Introdução ao Systemd: Parte Prática

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. bg2016030801

1. Iniciar o sistema

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).

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.

Dois, iniciar o serviço

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.

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.

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

Três, interromper o serviço.

Para encerrar o serviço em execução, é necessário executar. systemctl stop Comando.

有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出 kill Sinal.

Além disso, é necessário executar a reinicialização do serviço. systemctl restart Comando.

Quatro, compreendendo o arquivo de configuração.

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.

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.

Cinco, [Unidade] Bloco: Ordem de inicialização e dependências.

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 se network.target ou sshd-keygen.service Precisa ser iniciado, então sshd.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: Representa sshd.service com sshd-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.

Seis, [Serviço] Bloco: Comportamento de Início

Service Como definir um bloco para iniciar o serviço atual.

6.1 Comando de inicialização

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 arquivo key=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.

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.

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.

6.2 Tipo de inicialização

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 com fork() 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-Bus

notificar: 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.

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.

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.

6.3 Comportamento de Reinício

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.

Sete, bloco [Install]

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.

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.

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

Oito, o arquivo de configuração do Target.

O Target também tem seu próprio arquivo de configuração.

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: Requisitos basic.target Executar juntos.

Conflicts Campo: Campo de conflito. Se rescue.service ou rescue.target Executando, multi-user.target Não pode ser executado, e vice-versa.

After : indicar multi-user.target em basic.target rescue.service rescue.target Depois de iniciar, se eles tiverem algo para iniciar.

AllowIsolate Permitir o uso systemctl isolate Comando para mudar para multi-user.target

Nove, reinicie após modificar o arquivo de configuração.

Após modificar o arquivo de configuração, é necessário recarregar o arquivo de configuração e, em seguida, reiniciar os serviços relacionados.

(Fim)

Informações do documento

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:

Coleção Menu QQ