Tengo el siguiente script que debería ejecutar el servidor mongo DB y ejecutar mi aplicación después de reiniciar
Aquí está el guión que escribí:
sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py
y luego agrego este script a crontab para programarlo para que se ejecute al reiniciar
@reboot /home/user/project/script.sh
luego reinicio la máquina usando el comando
sudo reboot
pero no pasa nada, ¿alguien puede decirme cuál es el problema?
Respuesta1
¡No hagas eso!
Hay dos cosas mal en su enfoque.
¡No inicies un servicio systemd usando cron! Systemd tiene su propio método para iniciar servicios cuando la computadora se inicia/reinicia.
No lo use
sudo
dentro de un script que se usará en un trabajo cron. También deberá proporcionar la ruta completa a los archivos/programas.
1. usoenable
Como mongod
ya es un servicio systemd, no es necesario iniciarlo manualmente al reiniciar el sistema. Debería iniciarse automáticamente. Si no se inicia, use el siguiente comandosólo una vez:
sudo systemctl enable mongod
Nota.Una vez que use este comando, mongod.service debería iniciarse automáticamente cuando se inicie la computadora.
Si por alguna razón esto no funciona, actualice su pregunta con más detalles, como qué errores obtiene cuando usa el comando anterior.
2. usosudo crontab e
Cuando desee que un script se ejecute con privilegios de administrador a través de cron
, no sudo
lo incluya.
Elimine la línea existente usando crontab -e
.
Luego usa el comando:
sudo crontab -e
Luego agregue la siguiente línea en el archivo:
@reboot /home/user/project/script.sh
donde script.sh debería verse así:
#!/bin/bash
cd /full/path/to/airnotifier/
/usr/bin/python3 /full/path/to/airnotifier/app.py
La razón por la que necesita la ruta completa, por ejemplo, /home/USER/project/airnotifier/
es porque cuando cron
se inicie como root
usuario (recuerde lo sudo
anterior a crontab -e
), no se iniciará en su directorio de usuario.
La otra cosa acerca de cron es que no tiene todas las variables ambientales como la RUTA completa. Por lo tanto, es posible que python3
también necesite la ruta al comando.
Espero que esto ayude