Diese Frage wurde schon einige Male gestellt, aber ich schien sie mit den vorhandenen Informationen nicht zum Laufen zu bringen.
Mein Pi läuft Raspbian. Ich habe ein Python-Skript namens dnscheck.py, das sich für immer wiederholt.
Ich brauche es, um beim Booten zu laufen. Ich weiß, ich muss eine .sh-Datei erstellen, die so etwas wie enthält
sudo python dnscheck.py &
Was ich nicht weiß, ist, wo diese Datei sein sollte oder ob sie etwas anderes enthalten sollte. Ich kenne den Ordner init.d, aber ich stelle mir vor, dass es einen einfacheren Weg gibt, diese einfache Aufgabe zu erledigen, wenn ich das Beispiel für ein Skelett sehe.
Antworten:
Wenn Sie den Prozess mit Befehlen wie "Start", "Stopp", "Neustart" usw. mithilfe des Skelettskripts steuern möchten, ist eine Änderung für Ihre Zwecke möglicherweise die beste Option.
Wenn der Prozess nur gestartet werden soll, geben Sie den Befehl in ein
/etc/rc.local
. (Ich habe mein RPi nicht zur Hand, aber ich habe online gelesen, dass es eine 'exit 0'-Zeile gibt. Sie sollten Ihren Befehl über diese Zeile setzen.)quelle
rc.local
läuft root. Sie sollten natürlich auch den vollständigen Pfad zum Skript angeben. Sie sollten auch&
am Ende hinzufügen, damit sich das Skript teilt, z/path/to/foobar.py &
.&
? Denn wenn ich es ohne benutze, funktioniert alles noch wie erwartet.Verschieben Sie Ihr Skript (wir speichern es in der Datei
dnscheck
) nach/etc/init.d/
und legen Sie die Berechtigungen fest, damit es ausgeführt werden kann:Fügen Sie oben in Ihrem Skript LSB-Init-Tags hinzu . Möglicherweise möchten Sie Required-Start / Stop und die Description-Tags an Ihr Skript anpassen.
Erstellen Sie dann die symbolischen Links, indem Sie ausführen
quelle
/etc/rc.local
nicht ausreicht.Natürlich gibt es viele Möglichkeiten, aber vergessen Sie nicht, dies zu tun
cron
. Wenn Sie eine@reboot
Zeile in Ihre crontab einfügen, wird dieser Befehl bei jedem Neustart ausgeführt.Zum Testen habe ich meinem Benutzer crontab mit der folgenden Zeile hinzugefügt
crontab -e
:@reboot echo "$(date)" >> ~/boot.txt
Der Vorteil dieser Methode besteht darin, dass Sie den Job nach Bedarf in anderen Intervallen als nur zur Startzeit aufrufen können und keine Init-Skripte bearbeiten müssen.quelle
Wenn Sie eine rc.local-Datei verwenden, kann dies zur Fehlerbehebung hilfreich sein. Sie können Protokollierungszeilen hinzufügen, um Fehler (stderr) und Befehlsausgaben (stdout) in der Protokolldatei zu protokollieren. Gemäß diesem Beispiel wird diese Datei in /tmp/rc.local.log gespeichert
Lesen Sie mehr
quelle
Ich bin wirklich überrascht, dass die Daemontools von DJB hier nicht erwähnt werden. Daemontools führt die ordnungsgemäße Prozessüberwachung durch und Sie können coole Funktionen wie die automatische Protokollierung in Rotation hinzufügen. TL; DR Wenn Sie mit nichts davon vertraut sind, wird Ihr Prozess bei jedem Fehlschlagen neu gestartet und startet automatisch, wenn sich Ihr Pi einschaltet. Dies ist großartig, wenn Sie ein fehlerhaftes Python-Programm mit Fehlermodi geschrieben haben, aber nicht möchten, dass es nur stirbt, wenn ein Fehler auftritt.
Installieren:
Führen Sie dann die folgenden Schritte aus, um daemonisierte Prozesse zu erstellen:
Meistens ist es so einfach wie das Kopieren eines
run
Skripts in einen/etc/service/<my_custom_service_name>
anderen Vorteil: Sie können als jeder Benutzer oder Root ausgeführt werden! Details im Link.FWIW Ich hatte ein Pi-Projekt, in dem ich 3 verschiedene Python-Prozesse hatte (jeder hatte eine Ausführungsschleife unter Verwendung der CPU-Zeit, so dass ich unter Verwendung von 3 Prozessen jedem Prozess erlaubte, 1 CPU-Kern zu nutzen). Daemontools ermöglichte es mir, sicherzustellen, dass alle 3 automatisch ausgeführt werden und weiterhin ausgeführt werden, nachdem ich den Pi angeschlossen habe.
quelle
Hier ist die Lösung, die ich ständig benutze.
Erstellen Sie eine Desktop-Datei
Geben Sie Folgendes ein
füge diese Datei in das ein
und starten Sie Ihre Himbeer-Pi und es sollte Ihr Programm in einem neuen Terminal automatisch ausführen
quelle
Um eine .py-Datei zu verwenden, setzen Sie einfach die Zeile ganz
#!/usr/bin/python
am Anfang Ihrer Datei. Dann mache es ausführbar mitchmod +x filename
. Als nächstes fügen Sie die Zeile/path/to/file.py &
zu/etc/rc.local
vor derexit 0
Linie (Swapping/path/to/file.py
mit dem Pfad zu Ihrem Skript). Dadurch wird Ihr Python-Skript am Ende des Startvorgangs ausgeführt.quelle
Hier ist eine noch einfachere Methode, die bei mir funktioniert hat. Ändern Sie den Autostart in LXDE.
Öffnen Sie ein Terminal und bearbeiten Sie die Autostart-Datei wie folgt:
Fügen Sie die folgende Textzeile am unteren Rand hinzu (ändern Sie den Pfad nach Bedarf, bis sich Ihre example.py befindet).
ctr-x und speichern. Möglicherweise müssen Sie das Python-Skript wie folgt ausführbar machen:
Referenz für Autostart in LXDE und Referenz, um Python ausführbar zu machen
quelle
Diese Lösungen haben bei mir nicht funktioniert, als ich versuchte, ein Python-Skript mit Feh zu starten. Folgendes hat funktioniert. Es startet ein Skript nach dem Login.
Öffnen Sie eine Terminalsitzung und bearbeiten Sie die Datei
sudo nano /etc/profile
Fügen Sie die folgende Zeile am Ende der Datei hinzu
/home/pi/your_script_name.sh
Ersetzen Sie den Skriptnamen und -pfad durch den korrekten Namen und Pfad Ihres Startskripts. Speichern und schließen
Drücken Sie Strg + X, um den Nano-Editor zu beenden, gefolgt von Y, um die Datei zu speichern.
So sah meine script.sh aus:
Ich glaube, ich habe sowohl script.sh als auch script.py mit dem chmod ausführbar gemacht
quelle