Este artigo explica como executar um comando ou script na inicialização como root no Linux, de duas maneiras: usando systemd ou um serviço de cron.
Para usar o systemd para executar um comando ou script como root quando o computador inicializa, crie um arquivo (como root) chamado meucomando.service
(substitua meucomando
com o que você quiser chamá-lo) em /etc/systemd/system/
.
Podemos usar o editor de texto da linha de comando Nano para abrir/criar este arquivo:
sudo nano /etc/systemd/system/meucomando.service
Neste arquivo, cole o seguinte:
[Unit]
Description=your description
[Service]
ExecStart=/path/to/command/or/script
[Install]
WantedBy=multi-user.target
Aqui, altere o valor Description
para descrever o que ele faz, e o valor ExecStart
para o comando ou caminho do script que você deseja executar como raiz na inicialização. Não adicione sudo
no início do comando ou script, porque ele funciona como root qualquer maneira.
Agora salve o arquivo e saia do Nano. Caso você não esteja familiarizado com o editor de textos Nano, você pode salvar o arquivo pressionando Ctrl + o
e, em seguida, Enter
. Saia pressionando Ctrl + x
.
Em seguida, você precisa habilitar o serviço do systemd para ser executado na inicialização, usando o seguinte comando:
sudo systemctl enable meucomando.service
Lembre-se de substituir meucomando.service
pelo nome de arquivo real que você usou para este arquivo de serviço do systemd. Não há necessidade de executar o serviço do systemd agora, já que ele deve executar no boot.
Se você usar isso para executar um script, certifique-se de tornar o script executável (chmod +x /caminho/para/script
) ou então ele não será executado.
Este é um arquivo de unidade systemd muito simples que é executado apenas uma vez. Estes podem ser muito mais complexos, dependendo do que você precisa. Por exemplo, você pode usar um comando que funciona antes ExecStart
, tê-lo iniciado somente depois que outra unidade se tornar ativa, ter o comando executado somente após outro serviço, por exemplo, o serviço de rede foi iniciado (After=network.target
, ao mesmo tempo em que declara uma dependência deste serviço usando Wants=
ou Requires=
), e muito mais. Verifique as páginas man systemd.service e systemd.unit para obter mais detalhes.
Para usar um serviço de cron para executar um comando ou script como root quando o sistema inicializa, edite o crontab do usuário root usando:
sudo crontab -e
E na parte inferior do arquivo (ele também pode estar vazio), use o seguinte:
@reboot /caminho/para/comando/ou/script
Agora salve o crontab e saia. Se você usou o editor da linha de comando Nano para editá-lo (deve ser padrão na maioria dos casos), você pode salvar o arquivo pressionando Ctrl + o
e, em seguida, Enter
. Saia do nano pressionando Ctrl + x
. Não adicione sudo
antes do comando ou script, porque ele roda como root de qualquer maneira, já que é adicionado ao crontab do root.
Caso você queira usar um editor específico para editar o crontab do root, execute-o assim: sudo EDITOR=editor crontab -e
, por exemplo, para Vim: sudo EDITOR=vim crontab -e
, ou para Nano: sudo EDITOR=nano crontab -e
.
Algumas notas sobre isso:
chmod +x /caminho/para/script
) ou então ele não será executadoPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
sleep
, por exemplo: @reboot /usr/bin/sleep 60; /caminho/para/comando/ou/script
executar o comando ou script 60 segundos após as inicializarem o sistemaQual escolher entre systemd ou um serviço de cron para executar um comando ou script como root na inicialização, se você tiver uma escolha? Na dúvida, escolha systemd (se estiver disponível no seu sistema) porque deve ser mais confiável e mais fácil de usar.
Por exemplo, nem todas as versões do cron suportam a opção @reboot
, ou o comando/script só pode ser executado quando o sistema é reiniciado, e não quando ele é desligado (isso não aconteceu para mim no Ubuntu 20.04, Fedora 24, Manjaro Linux e Debian 10, mas isso pode acontecer em algumas distribuições Linux).
Também vale a pena notar que @reboot
configura um serviço para executar uma vez quando o daemon é iniciado. cron não é geralmente reiniciado, então isso geralmente corresponde à máquina sendo inicializada. Por exemplo, o Debian (e as distribuições Linux baseadas no Debian) impõe isso, fazendo com que o cron não re-execute serviços com @reboot
quando o serviço cron é reiniciado. Em algumas distribuições Linux, porém, reiniciar o serviço do cron pode re-executar os comandos @reboot
.
Além disso, no Fedora, o cron não é instalado por padrão (instale-o usando sudo dnf install cronie
). No Manjaro, o cron é instalado por padrão, mas não habilitado por padrão (habilite-o usando sudo systemctl enable --now cronie
).
Gosta de automatizar e usar ferramentas de terminal no Linux para facilitar seu trabalho? Veja outros artigos relacionados, como este em que explicamos como encontrar todos os arquivos contendo um texto específico no Linux pela linha de comando; este em que mostramos como lançar aplicativos de inicialização com um atraso; e este que apresentamos de maneira simples como executar um comando depois que o anterior terminou no Linux.
Esse post foi traduzido do site LinuxUprising.com pela rtland.team.
Confira a versão original desse post em inglês:
How To Run A Command Or Script As Root On Startup / Boot Using systemd or A Cron Job