Python Skript per Autostart ausführen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
jens233
User
Beiträge: 7
Registriert: Samstag 17. März 2018, 22:42

@ __deets__ ,

hast Recht, gerade nochmal Probiert…
das sudo braucht man nicht…


kein Plan ob Du dann eine Saubere Lösung für Theynk sein Problem hast ???

hätte da auch noch ein Problem:
viewtopic.php?f=31&t=42438
hab erst mal Serverseitig was ändern lassen.

das eigentliche Problem würde mich immer noch interessieren.

Wie gesagt, befasse mich nun erst 14 Tage mit Python…
Theynk
User
Beiträge: 22
Registriert: Donnerstag 8. März 2018, 14:20

Also ich habe jetzt "sleep 30 && /home/shares/test/Raspberry/Interface1.py" eingegeben allerdings tut sich immer noch nichts. Bekomme diese Meldung:
● Interface.service - Interface
Loaded: loaded (/etc/systemd/system/Interface.service; enabled; vendor preset
Active: failed (Result: exit-code) since Fri 2018-03-23 23:17:22 CET; 1min 25
Process: 341 ExecStart=/home/shares/test/Raspberry/Interface1.py (code=exited,
Main PID: 341 (code=exited, status=1/FAILURE)

Mär 23 23:17:18 raspberrypi systemd[1]: Started Interface.
Mär 23 23:17:22 raspberrypi Interface1.py[341]: Traceback (most recent call last
Mär 23 23:17:22 raspberrypi Interface1.py[341]: File "/home/shares/test/Raspbe
Mär 23 23:17:22 raspberrypi Interface1.py[341]: root = Tk() # Fenster erstel
Mär 23 23:17:22 raspberrypi Interface1.py[341]: File "/usr/lib/python3.5/tkint
Mär 23 23:17:22 raspberrypi Interface1.py[341]: self.tk = _tkinter.create(sc
Mär 23 23:17:22 raspberrypi Interface1.py[341]: _tkinter.TclError: no display na
Mär 23 23:17:22 raspberrypi systemd[1]: Interface.service: Main process exited,
Mär 23 23:17:22 raspberrypi systemd[1]: Interface.service: Unit entered failed s
Mär 23 23:17:22 raspberrypi systemd[1]: Interface.service: Failed with result 'e


Ist das noch der gleich Fehler? Da da jetzt ja eindeutig weniger ist. Was ich mich gefragt habe, muss das nicht der Verweis auf die Unit sein?

Wenn ich ins Terminal "sudo /etc/rc.lokal" eingebe gibt der mir meine IP aus und nach 30sek öffnet der das gewünschte Interface allerdings nicht beim Start.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Du bist nach folgender Anweisung vorgegangen: https://webnist.de/autostart-0eines-pyt ... pberry-pi/.
Das wäre gut zu wissen, dann kann man konkreter helfen.

DA fehlt eigentlich nur, dass man das Verzeichnis anlegen sollte, falls es nicht existiert.
[codebox=bash file=Unbenannt.bsh]mkdir ~/.config/autostart[/code]
Theynk
User
Beiträge: 22
Registriert: Donnerstag 8. März 2018, 14:20

Ich bin nach sehr vielen Anleitungen vorgegangen da ja nichts geklappt hat xD
Wenn ich deinen Link öffne, kommt da nur, dass die Seite nicht gefunden wurde. Also wenn ich die System-Unit angelegt habe, die Verzögerung in rc.local eingetragen haben muss ich noch /.config/autostart machen? Wenn ja welchen Pfad muss ich da genau nutzen und was muss da noch rein? Wäre super wenn ich mir das hier sagen könntet, dann muss ich wenn ich heute Abend wieder zuhause bin nicht direkt googlen :roll:
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Autostart per window manager ist eine andere Methode als die Unit. Das macht man entweder oder.
Theynk
User
Beiträge: 22
Registriert: Donnerstag 8. März 2018, 14:20

Das heißt ich muss um das zu probieren die System-Unit löschen den Eintrag in rc.local löschen und dann das mit der Methode von Sirius machen?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Auch system unit und rc.local sind unabhängige Methoden. Das ist nicht wie beim Hochalpinklettern, wo man sich mehrfach sichert. Ein Mechanismus reicht. Und das ist kein ästhetisches Argument — mehrfach das gleiche Programm zu starten kann zu gegenseitiger Beeinflussung führen. Und die dann abbrauchen oder schlimmer noch subtiles Fehlverhalten auslösen.
Theynk
User
Beiträge: 22
Registriert: Donnerstag 8. März 2018, 14:20

ja gut verstehe ich aber es hat ja auch einzeln nicht funktioniert und ich dachte ich kann die systemunit per rc.local warten lassen. Das war da oben ja auch meine Frage. Ok heißt für mich nochmal komplett von vorne anfangen richtig?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie willst du denn die unit warten lassen durch die rc.local? Die haben doch keinen Einfluss aufeinander :K und wenn die rc.local weiß wann’s losgeht, dann kann sie doch gleich das Programm starten?!?!

Entfern das alles. Und ja, fang neu an. Wenn du kannst, krieg raus wie dein OS genau heisst. Wie dein Windomanager genau heißt. Wie der autostart macht. Es KANN sein das es da Standards gibt, aber je mehr Infos du zusammenträgst und je spezifischer du suchst und fragst desto größer die Chance auf Erfolg.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Also nochmal die richtige URL: https://webnist.de/autostart-eines-pyth ... pberry-pi/
Das ist die Methode, um Grafikprogramme zu starten. Systemd oder init.rc sind halt da, um Dienste zu starten, die nicht mit dem User direkt interagieren.
Theynk
User
Beiträge: 22
Registriert: Donnerstag 8. März 2018, 14:20

Genau das war ja weiter oben meine Frage, da mir das schon komisch vorkam das in der rc.local nicht den verweis auf die Unit mache. Ok ich bin ca in einer halben std zuhause dann gucke ich nach. Ich habe das Betriebssystem mit NOOBS aufgesetzt. Danach dann ein update und upgrade durchgeführt. Gibt es Befehle die mir direkt ausspucken, welches Betriebssystem, Windowmaker etc habe?

Ok ich lese mir das mal während der Fahrt durch besten Dank.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es heißt windowmanager.. ...

Noobs ist kein OS. Sondern ein Ding zum auswählen und dann installieren eines OS. Welches du gewählt hast wissen wir nicht.

Hier gibt es eine Reihe von Tipps wie man da Details erhält: https://unix.stackexchange.com/question ... stems-name
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und nochmal allgemeiner was zum autostart. Mit GUI. Wenn du Glück hast. https://wiki.ubuntuusers.de/Autostart/
Theynk
User
Beiträge: 22
Registriert: Donnerstag 8. März 2018, 14:20

also selbstverständlich habe ich dann Raspian installiert.
Mit dem Hinweis von Sirius hat es geklappt. Ich könnte fast sagen ich liebe dich :D
danke danke danke für eure ganze Hilfe ich war echt am verzweifeln.
ok danke werde ich mir durchlesen.
IHack
User
Beiträge: 14
Registriert: Dienstag 13. März 2018, 11:17

Du willst in dem Unit- File das "default.target".
Das ist meist Runlevel5, also das Bunte mit Netzwerk und vielen möglichen Benutzern.
Du willst explizit NICHT das reboot.target. Die Ausführung deines Scriptes (wenn es denn richtig für systemd konfiguriert wäre), würde solange verzögert, bis du die Kiste neu starten würdest. Das ist nicht in deinem Sinne.

Und dann hast du einen gewaltigen Denkfehler in deinem Ansatz.
Du möchtest ein Userland Script als Systemdienst starten.
Keine leichte Aufgabe und erst recht keine gute Idee.

Da dein Script Fenster malen will, braucht es ein laufendes DesktopEnvirionment (also ein Gnome, KDE, xfce....)
Das läuft unter einem User.
Also kein Systemdienst.
Und deshalb liest du auch nur Fehler.
Dein Script wird gerufen und möchte irgendwohin schreiben, was es nicht kann, da systemd deinem Script weder ein Display noch ein Terminal zugeordnet hat. Ende Gelände.

Systemd kann aber auch im Userland spielen.
Tatsächlich kann jeder User seine eigenen Services starten.
Da wärest du jetzt richtig.

Aber es ist viel einfacher dein Script im jeweiligen DesktopEnvironment auf die herkömmliche (und bereits empfohlene) Weise als normales "Autosstart" - Script zu rufen.

Wenn du es dennoch mit deinem Servicefile via systemd starten möchtest, melde dich einfach normal am DE an, und gib dann als User die Kommandos:

Code: Alles auswählen

systemd enable my.service
systemd start my.service
ein.

Das "enable" weist systemd an, diese Unit auch künftig nach jedem Boot zu starten,
und "start" tut, was es sagt.

Wenn du als User mit systemd dein Script rufst, wird es logischerweise auch nur gerufen, wenn genau dieser User sich anmeldet.
Es ist nicht so ganz klar, ob du das wirklich willst.

Aber klar ist, dass ein Script, das Fenster malt, sicher KEIN Systemdienst sein kann.
Antworten