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

- 750
- 188
- Ms. Travis Schumm
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

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

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

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

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/

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

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/

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.

Eu realmente espero ajudá -lo a descobrir quais serviços, quer, metas e scripts em execução durante a inicialização é sobre.
- « Como instalar o Elasticsearch, Logstash e Kibana (Elk Stack) no CentOS/Rhel 7
- O poder do Linux History Command em Bash Shell »