Os passos abaixo mostra como configurar um serviço no systemd para executar um script ao iniciar o Linux, quando uma conexão de rede já estiver disponível.
- Crie um diretório para testes:
sudo mkdir /diretorio
- Agora crie um arquivo de script com nome meu-script.sh, ou outro nome de sua escolha, no diretório criado no passo anterior.
sudo nano /diretorio/meu-script.sh
- Adicione a esse arquivo os comandos para serem executados. Neste exemplo vamos apenas gravar a data e hora do sistema e uma mensagem em um arquivo no diretório de testes.
arquivo="/diretorio/teste.txt" dataHora=$(date "+%d/%m/%Y %H:%M:%S") texto="$dataHora - Script executado!" echo $texto >> $arquivo
- Salve o arquivo (CTRL+O).
- Feche o editor de texto (CTRL+X).
- Altere as permissões do script para torná-lo executável:
sudo chmod +x /diretorio/meu-script.sh
- Execute o script para testar:
sudo /diretorio/meu-script.sh
- Confira o conteúdo do arquivo criado:
cat /diretorio/teste.txt
- Crie um arquivo de unidade do systemd para configurar o meu-script.sh como um serviço:
sudo nano /lib/systemd/system/meu-script.service
- Adicione o conteúdo abaixo nesse arquivo de unidade do systemd:
[Unit] Description=Meu script para testes Wants=network-online.target After=network.target [Service] ExecStart=/bin/bash /diretorio/meu-script.sh [Install] WantedBy=multi-user.target
- Salve o arquivo (CTRL+O).
- Feche o editor de texto (CTRL+X).
- Execute o comando abaixo agora e sempre que modificar o arquivo de unidade do systemd:
sudo systemctl daemon-reload
- Teste o serviço recém configurado:
sudo systemctl start meu-script
- Cada vez que iniciar o serviço, uma nova linha será adicionada ao arquivo teste.txt. Use este comando para conferir:
sudo cat /diretorio/teste.txt
- Habilite o novo serviço para iniciar junto com o sistema:
sudo systemctl enable meu-script
- Reinicie o sistema algumas vezes para testar:
sudo shutdown -r now
- E confira o resultado novamente:
sudo cat /diretorio/teste.txt
Observações:
- A configuração After=network.target informa ao systemd para executar o serviço após iniciar o serviço de rede.
- A configuração Wants=network-online.target informa ao systemd que nosso serviço necessita do serviço de rede online, ou seja, requer conexão de rede disponível.
- A configuração WantedBy=multi-user.target informa ao systemd que nosso serviço é requerido para o nível de execução multi-user.target.
- Testado no Ubuntu Linux 20.04 LTS, mas deve funcionar em outras distribuições e versões que usem o systemd.