Como executar um script na inicialização do Ubuntu Linux?

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.
Rolar para cima