Os passos a seguir mostram como configurar um serviço no systemd para executar um script automaticamente ao iniciar o Linux, após uma conexão de rede estar disponível. Quando o sistema é iniciado ou reiniciado, o script será executado como root. Por isso, é importante testar seus códigos manualmente antes, para evitar problemas durante o reboot. Dependendo da sua necessidade, instale as dependências como root ou especifique o caminho completo dos diretórios, como o do Java, Node.js, ou qualquer outro que for utilizar.
Estou supondo que nosso script esta dentro da pasta scripts
/home/ubuntu/scripts/
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 /home/ubuntu/scripts/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 /home/ubuntu/scripts/meu-script.sh
Execute o script para testar:
sudo /home/ubuntu/scripts/meu-script.sh
Confira o conteúdo do arquivo criado:
cat /home/ubuntu/scripts/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=Start Server
Wants=network-online.target
After=network.target
[Service]
# Executa o serviço como o usuário 'user'
# Porem suas pendencia devem estar instaladas em root tambem
User=user
# Diretório de trabalho, onde o script será executado
WorkingDirectory=/home/starts/scripts
# Comando para iniciar o serviço (caminho completo para o script)
ExecStart=/bin/bash /diretorio/meu-script.sh
RemainAfterExit=yes
StandardOutput=journal
StandardError=journal
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 /home/ubuntu/scripts/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 /home/ubuntu/scripts/teste.txt
Testado no Ubuntu Linux 20.04 LTS
Caso queira ver um log no journal do linux vocêpode usar:
sudo journalctl -u meu-script
Caso queira ver o status você pode usar:
sudo systemctl status meu-script.service
Links Uteis
mistarts.com.br
Meu GitHub
Top comments (0)