Não faça isso!

Não faça isso!

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.

  1. 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.

  2. Não use sudodentro 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 mongodjá é 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 sudoo 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 croniniciar como rootusuário (lembre-se de sudoantes 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ê python3também pode precisar do caminho para o comando.

Espero que isto ajude

informação relacionada