Eu tenho o seguinte script que deve executar o servidor mongo DB e executar meu aplicativo após a reinicialização
aqui está o script que escrevi:
sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py
e então adiciono este script ao crontab para agendá-lo para ser executado na reinicialização
@reboot /home/user/project/script.sh
então eu reinicio a máquina usando o comando
sudo reboot
mas nada acontece, alguém pode me dizer qual é o problema?
Responder1
Não faça isso!
Há duas coisas erradas em sua abordagem.
Não inicie um serviço systemd usando cron! O Systemd possui seu próprio método para iniciar serviços quando o computador é inicializado/reiniciado.
Não use
sudo
dentro de um script que será usado em um cron job. Você também precisará fornecer o caminho completo para os arquivos/programas.
1. Usoenable
Como mongod
já é um serviço do systemd, você não precisa iniciá-lo manualmente na reinicialização do sistema. Deve iniciar automaticamente. Se não iniciar, use o seguinte comandoapenas uma vez:
sudo systemctl enable mongod
Observação.Depois de usar este comando, o mongod.service deverá iniciar automaticamente quando o computador for inicializado.
Se por algum motivo isso não funcionar, atualize sua pergunta com mais detalhes, como quais erros você obtém ao usar o comando acima.
2. Usosudo crontab e
Quando você quiser que um script seja executado com privilégio de administrador via cron
, não coloque sudo
o script.
Remova a linha existente usando crontab -e
.
Então use o comando:
sudo crontab -e
Em seguida, adicione a seguinte linha no arquivo:
@reboot /home/user/project/script.sh
onde o script.sh deve ficar assim:
#!/bin/bash
cd /full/path/to/airnotifier/
/usr/bin/python3 /full/path/to/airnotifier/app.py
A razão pela qual você precisa do caminho completo é /home/USER/project/airnotifier/
porque quando o usuário cron
iniciar como root
usuário (lembre-se de sudo
antes do crontab -e
), ele não iniciará no diretório do usuário.
A outra coisa sobre o cron é que ele não possui todas as variáveis ambientais como o PATH completo. Portanto, você python3
também pode precisar do caminho para o comando.
Espero que isto ajude