Como criar e executar novas unidades de serviço no Systemd usando script de shell

Como criar e executar novas unidades de serviço no Systemd usando script de shell

Alguns dias atrás, me deparei com um CENTOS 7 Distro de 32 bits e eu senti o desejo de testá-la em uma máquina antiga de 32 bits. Depois de inicializar, percebi que ele tinha um bug e estava perdendo a conexão de rede, que eu tive que virar "acima" manualmente todas as vezes depois da inicialização. Então, a pergunta era como eu poderia definir um script fazendo esse trabalho, correndo toda vez que inicializo minha máquina?

Bem, isso é muito simples e eu mostrarei o Systemd Way usando unidades de serviço. Mas primeiro uma pequena introdução às unidades de serviço.

Neste artigo, vou explicar o que um “Unidade de serviço” no Systemd é, como é fácil criar e executar um. Vou tentar simplificar o que “Alvos” são, por que os chamamos “Coleções de unidades” E quais são seus "quer". Finalmente, estamos aproveitando uma unidade de serviço para executar nosso próprio script após o procedimento de inicialização.

É óbvio que seu computador é útil devido aos serviços que oferece e, para ter essa funcionalidade, muitos serviços devem ser chamados de botas de computador e atinge diferentes níveis. Outros serviços são chamados para serem executados quando o computador atingir, por exemplo, o nível de resgate (RUNLEVEL 0) e outros quando atinge o nível multiusuário (RUNLEVEL 3). Você pode imaginar esses níveis como alvos.

De uma maneira simples, o Target é uma coleção de unidades de serviço. Se você quiser dar uma olhada nas unidades de serviço em execução em seu gráfico.alvo nível, tipo:

# SystemCtl --Type = Serviço 
Liste todas as unidades de serviço no CentOS 7

Como você pode ver, alguns serviços são ativos e "correndo" o tempo todo, enquanto outros correm e terminam (saiu). Se você deseja verificar o status de um serviço, digite:

# Systemctl Status Firewalld.serviço 
Verifique o status do serviço no CentOS 7

Como você pode ver, verifiquei o status de Firewalld.serviço (dica: você pode usar o complemento automático para o nome do serviço). Isso me informa que Firewalld O serviço está funcionando o tempo todo e está ativado.

Não perca: Como configurar o serviço Firewalld no CentOS 7

Ativado e desativado significa que o serviço será carregado permanentemente ou não, durante a próxima inicialização, respectivamente. Por outro lado, para iniciar e parar um serviço tem a limitação da presente sessão e não é permanente.

Por exemplo, se você digitar:

# SystemCtl Stop Firewalld.Serviço # Systemctl Status Firewalld.serviço 
Gerenciar serviços no CentOS 7

Você pode ver que o Firewalld.serviço está inativo (morto), mas ainda está ativado, o que significa que durante a próxima inicialização será carregada. Então, se queremos que um serviço seja carregado durante o tempo de inicialização no futuro, devemos ativá -lo. Que grande conclusão! Vamos criar um, é fácil.

Se você for para a pasta:

# cd/etc/systemd/sistema # ls -l 
Arquivos do sistema Systemd

Você pode ver alguns arquivos de link de serviços de unidade e alguns diretórios do "quer" de um alvo. Por exemplo: o que o alvo multiusuário deseja ser carregado quando o procedimento de inicialização atingir seu nível, está listado no diretório com nome /etc/Systemd/System/MultiUser.alvo.quer/.

# LS MultiUser.alvo.quer/ 
Serviços de metas de múltiplos usuários

Como você pode ver, não contém apenas Serviços mas também outro alvos que também são coleções de serviços.

Vamos fazer uma unidade de serviço com o nome conexão.serviço.

# conexão vim.serviço 

e digite o seguinte (HIT "eu" Para o modo de inserção), salve -o e saia (com "esc" e “: Wq!” ):

[Unidade] Descrição = Fazendo a conexão da rede após = Rede.Target [Service] ExecStart =/Root/Scripts/Conup.sh [install] wantedby = multiususer.alvo 
Crie novas unidades de serviço no CentOS 7

Para explicar o acima: Criamos uma unidade de tipo de serviço (você também pode criar unidades do tipo de destino), o definimos para ser carregado após o rede.alvo (Você pode entender que o procedimento de inicialização atinge as metas com uma ordem definida) e queremos que sempre o serviço começar a executar um script de bash com o nome CONUP.sh que vamos criar.

A diversão começa com a última parte [instalar]. Diz que será procurado por "multi usuário.alvo". Portanto, se permitirmos ao nosso serviço um link simbólico para esse serviço será criado dentro do multi usuário.alvo.quer pasta! Entendi? E se desativarmos esse link será excluído. Tão simples.

Apenas habilite e verifique:

# SystemCtl Ativar conexão.serviço 

nos informa que o vínculo simbólico no multi usuário.alvo.quer Pasta foi criada. Confira:

# LS MultiUser.alvo.quer/ 
Ativar serviço no CentOS 7

Como você pode ver "conexão.serviço" está pronto para a próxima inicialização, mas devemos criar o arquivo de script primeiro.

# cd /root # mkdir scripts # scripts de cd # vim conep.sh 

Adicione a seguinte linha dentro vim e salve:

#!/bin/bash nmcli conexão up ENP0S3 

Obviamente, se você quiser que seu script execute outra coisa, você pode digitar o que quiser, em vez da segunda linha.

Por exemplo,

#!/bin/bash toque/tmp/testbootfile 

Isso criaria um arquivo dentro /tmp Pasta (apenas para verificar se seu serviço está funcionando).

Também devemos fazer o script executável:

# chmod +x conep.sh 

Agora estamos prontos. Se você não quiser esperar até a próxima inicialização (ela já está ativada), podemos iniciar o serviço para a digitação atual da sessão:

# SystemCtl Start Connection.serviço 

Pronto! Minha conexão está em funcionamento!

Se você escolheu escrever o comando “Touch /TMP /TestBootFile” Dentro do script, apenas para verificar sua funcionalidade, você verá este arquivo criado dentro /tmp pasta.

Confirme o status do serviço

Eu realmente espero ajudá -lo a descobrir quais serviços, quer, metas e scripts em execução durante a inicialização é sobre.