Poucos dias atrás, eu 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 havia um bug e estava perdendo a conexão de rede, que tive que desligá-lo "pra cima" manualmente todas as vezes após a inicialização. Então, a questão era como eu poderia definir um script fazendo esse trabalho, rodando toda vez que eu inicializar minha máquina?
Bem, isso é muito simples e vou mostrar a maneira do systemd usando unidades de serviço. Mas primeiro uma pequena introdução às unidades de serviço.
Neste artigo, vou explicar o que é “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 os 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 o seu computador é útil pelos serviços que oferece e para ter esta funcionalidade, muitos serviços têm que ser chamados enquanto o computador inicializa e atinge diferentes níveis. Outros serviços são chamados para serem executados quando o computador atinge, por exemplo, o nível de resgate (
nível de execução 0) e outros quando atinge o nível multiusuário (nível de execução 3). Você pode imaginar esses níveis como alvos.De uma forma simples, o alvo é um conjunto de unidades de serviço. Se você quiser dar uma olhada nas unidades de serviço em execução em seu graphical.target nível, tipo:
# systemctl --type = serviço.
Como você pode ver, alguns serviços estão ativos e "corrida" o tempo todo, enquanto outros rodam uma vez e terminam (saem). Se você deseja verificar o status de um serviço, digite:
# systemctl status firewalld.service.
Como você pode ver, verifiquei o status de firewalld.service
(gorjeta: você pode usar o preenchimento automático para o nome do serviço). Me informa que Firewalld serviço está em execução o tempo todo e está habilitado.
Não perca:Como configurar o serviço FirewallD no CentOS 7
Habilitado e desabilitado significa que o serviço será carregado permanentemente ou não, durante a próxima inicialização, respectivamente. Por outro lado, 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.service. # systemctl status firewalld.service.
Você pode ver que o firewalld.service
está inativo (morto), mas ainda está habilitado, o que significa que durante a próxima inicialização ele será carregado. Portanto, se quisermos que um serviço seja carregado durante a inicialização no futuro, devemos habilitá-lo. Que grande conclusão! Vamos criar um, é fácil.
Se você for para a pasta:
# cd / etc / systemd / system. # 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 destino multiusuário deseja carregar quando o procedimento de inicialização atinge seu nível, é listado no diretório com o nome /etc/systemd/system/multi-user.target.wants/.
# ls multi-user.target.wants /
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 connection.service.
# vim connection.service.
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 de rede. Depois de = network.target [Serviço] ExecStart = /root/scripts/conup.sh [Instalar] WantedBy = multi-user.target.
Para explicar o acima: criamos uma unidade de tipo de serviço (você também pode criar unidades de tipo de destino), configuramos para ser carregada após o network.target (você pode entender que o procedimento de inicialização atinge os alvos com uma ordem definida) e queremos que toda vez que o serviço comece a executar um script bash com o nome conup.sh que vamos criar.
A diversão começa com a última parte [instalar]. Diz que será desejado por “Multi-user.target”. Portanto, se habilitarmos nosso serviço, um link simbólico para esse serviço será criado dentro do multi-user.target.wants pasta! Entendi? E se o desativarmos, esse link será excluído. Tão simples.
Basta habilitá-lo e verificar:
# systemctl enable connection.service.
informa-nos que o link simbólico no multi-user.target.wants pasta foi criada. Confira:
# ls multi-user.target.wants /
Como você pode ver “Connection.service” está pronto para a próxima inicialização, mas devemos criar o arquivo de script primeiro.
# cd / root. # scripts mkdir. # scripts de cd. # vim conup.sh.
Adicione a seguinte linha dentro vim e salve:
#! / bin / bash. conexão nmcli até enp0s3.
Claro, se você quiser que seu script execute outra coisa, pode digitar o que quiser em vez da segunda linha.
Por exemplo,
#! / bin / bash. toque em / tmp / testbootfile.
que criaria um arquivo dentro /tmp pasta (apenas para verificar se o serviço está funcionando).
Devemos também tornar o script executável:
# chmod + x conup.sh.
Agora estamos prontos. Se você não quiser esperar até a próxima inicialização (já está habilitado), podemos iniciar o serviço para a sessão atual digitando:
# systemctl start connection.service.
Voila! Minha conexão está funcionando!
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 são os serviços, desejos, metas e scripts de execução durante a inicialização.