Ich habe das folgende Skript, das den Mongo DB-Server ausführen und meine Anwendung nach dem Neustart ausführen soll
hier ist das Skript, das ich geschrieben habe:
sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py
und dann füge ich dieses Skript zu crontab hinzu, um es für den Neustart zu planen
@reboot /home/user/project/script.sh
dann starte ich die Maschine mit dem Befehl neu
sudo reboot
aber es passiert nichts. Kann mir bitte jemand sagen, wo das Problem liegt?
Antwort1
Tu das nicht!
An Ihrem Ansatz sind zwei Dinge falsch.
Starten Sie keinen systemd-Dienst mit cron! Systemd verfügt über eine eigene Methode zum Starten von Diensten beim Starten/Neustart des Computers.
Verwenden Sie es nicht
sudo
in einem Skript, das in einem Cron-Job verwendet wird. Sie müssen auch den vollständigen Pfad zu den Dateien/Programmen angeben.
1. Verwendungenable
Da mongod
es sich bereits um einen systemd-Dienst handelt, müssen Sie ihn beim Systemneustart nicht manuell starten. Er sollte automatisch starten. Wenn er nicht startet, verwenden Sie den folgenden Befehlnur einmal:
sudo systemctl enable mongod
Notiz.Sobald Sie diesen Befehl verwenden, sollte der mongod.service automatisch beim Start des Computers gestartet werden.
Wenn dies aus irgendeinem Grund nicht funktioniert, aktualisieren Sie Ihre Frage mit weiteren Details, beispielsweise, welche Fehler bei Verwendung des obigen Befehls auftreten.
2. Verwendungsudo crontab e
Wenn Sie möchten, dass ein Skript mit Administratorrechten über ausgeführt wird cron
, geben Sie das Skript nicht sudo
ein.
Entfernen Sie die vorhandene Zeile mit crontab -e
.
Verwenden Sie dann den Befehl:
sudo crontab -e
Fügen Sie dann die folgende Zeile in die Datei ein:
@reboot /home/user/project/script.sh
wo script.sh so aussehen sollte:
#!/bin/bash
cd /full/path/to/airnotifier/
/usr/bin/python3 /full/path/to/airnotifier/app.py
Sie benötigen den vollständigen Pfad, z. B. /home/USER/project/airnotifier/
weil beim cron
Start als root
Benutzer (denken Sie an das sudo
vor dem crontab -e
) nicht in Ihrem Benutzerverzeichnis gestartet wird.
Ein weiterer Punkt bei cron ist, dass es nicht alle Umgebungsvariablen wie den vollständigen Pfad enthält. Daher benötigen Sie möglicherweise python3
auch den Pfad zum Befehl.
Hoffe das hilft