Tu das nicht!

Tu das nicht!

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.

  1. Starten Sie keinen systemd-Dienst mit cron! Systemd verfügt über eine eigene Methode zum Starten von Diensten beim Starten/Neustart des Computers.

  2. Verwenden Sie es nicht sudoin 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 mongodes 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 sudoein.

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 cronStart als rootBenutzer (denken Sie an das sudovor 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 python3auch den Pfad zum Befehl.

Hoffe das hilft

verwandte Informationen