Executar script ao iniciar sistema (ubuntu server)

Olá pessoal, mas uma vez peço ajuda a vocês. Eu tenho um pequeno servidor aqui em casa e gostaria de fazer uma coisa muito simples que seria enviar um email para mim mesmo caso o servidor seja reiniciado.

Eu escrevi um script bash bem simples e ele funciona quando executo no terminal perfeitamente, porém o passo agora seria colocar esse script em algum lugar pro sistema fazer isso de forma automatica. Já pesquisei bastante na internet e achei várias soluções, mas não sei pq NENHUMA funciona.

Já tentei pelo método do CRONTAB, já tentei configurando o arquivo /etc/rc0.d, já tentei editando o systemctl meuscript.service…

Algém teria alguam outra solução ?

PS: Estou com o Ubuntu server 18.04

1 Curtida

Então luciano

vc pode colocar o script na pasta Init do gdm
no ubuntu : /etc/gdm3/Init
no arch: /etc/gdm/Init
no fedora: /etc/gdm/Init

Acho que são estes os caminhos.
Basicamente toda vez que iniciar o gdm será executado o script.

1 Curtida

Ubuntu Server tem interface gráfica? Nunca usei.

Ubuntu server não possui interface gráfica por padrão.
Quando o assunto são servidores, o sistema precisa ser o mais leve possível, ou seja, tty puro.

3 Curtidas

O correto é fazer com arquivo .service (se o ubuntu server usa o systemd). É meio complicado pois tem várias opções. Já fiz algo parecido com o controlador de ventoinha. Uma vez que fez, vai parecer fácil hehehe (cria o arquivo, usa systemctl enable) Só tem o detalhe que seu script precisa usar a NET e bash, pode ser que systemd execute-o antes da hora. Trave a inicilalização do seu serviço apenas depois da NET online ou coloque um sleep no teu script pra garantir.

2 Curtidas

ok.

coloque no cron

sudo crontab -eu root

@reboot /caminho/para o/script.sh

pelo systemd
exemplo: teste.service

[Unit]
Description=script para email
After=network-online.target

[Service]
ExecStart=/home/usuario/software/script &

[Install]
WantedBy=multi-user.target

systemctl enable teste.service

2 Curtidas

Então, eu já tentei todas essas alternativas e ainda não consegui.

Uma coisa que não tentei foi fazer isso simultaneamente, como fazer o cron e fazer a configuração do Systemd, mas acho que isso não faz muito sentido.

1 Curtida

veja as permissões necessárias para rodar seu script, o padrão é rodar como usuário “root”. Confira o caminho dos comandos que você está usando. Veja se as variáveis de ambiente disponíveis na linha de comando (que o seu script usa) também estão disponíveis quando roda de forma automática. Geralmente na execução automática nao é carregado o profile do bash.

Por conta disso eu tinha feito meu programinha em C e compilei pra poder rodar ele sem problemas, mas mesmo assim o systemd rodava ele antes de carregarcompletamente o módulo da placa de vídeo, então na primeira execução sempre dava um log de erro do meu serviço. A dica é usar logs de debug para verificar o que está acontecendo.

1 Curtida

Olá @Deleterium, desculpa minha ignorancia mas como eu faço pra gerar um arquivo de log dentro de um bash script pra simular um debug?

Então, não manjo muito disso… mas acredito que simplesmente gerar saída de texto no seu script vai gerar entradas de log do systemd

echo "Iniciando script"
blablalalb
echo "valor da variavel var = $var"
blalbalblab
echo "antes de enviar o email"
comando_de_enviar_o_email
echo "depois de enviar o email"

Salva o script
systemctl start meuservico ------ Inicie o serviço
systemctl status -n50 meuserviço ----- Verifique as saídas de log que gerou na inicialização.

1 Curtida

Cria um lançador pro script e coloca na pasta /etc/xdg/autostart, deve funcionar.