Python Skript als Dienst unter Linux

  • Hallo Zusammen
    Ich bin an meiner Abschlussarbeit und sollte ein bereits vorhandenes Skript auf einem Linux System zum laufen bringen. Ich kann das Skript als Dienst starten, jedoch habe ich im Status Fehlermeldungen, die wahrscheinlich im Skript entstehen, oder der Ordnerstruktur auf die das Skript zugreift.
    Kennt sich jemand in diesem Gebiet aus und hätte Zeit/Lust sich das anzuschauen?
    Ich wohne/arbeite in Bern.
    Lg irrer

    Game-PC: i7 7600K, 16GB, GTX 1080, 960GB SSD, HP Omen X 35

  • Was meinst Du mit "im Status"? Und wie lauten die Fehlermeldungen?

    Lian-Li PC-V1100B / Eizo FlexScan S2133 x 2 / Intel Core 2 Duo E7400 / Asus P5Q / Asus STRIX R7 370

  • also das ganze ist einwenig Kompliziert via Forum zu machen, ich habe es versucht, ich habe die Skripte und einige Screenshots in der Dropbox abgelegt, hier der Link dazu: Dropbox


    Korrekturen:
    1) Änderung eines Verzeichnis, ist wahrscheinlich beim dokumentieren entstanden.
    2) Anpassung sdir in Linie 44 zu sdir2 (sollte sdir entsprechen, ohne Verweis auf subdir)
    3) Anpassung sdir allgemein, Verweis ohne subdir


    Ich denke der Status "active(exited)" bedeutet nichts gutes?


    Vielen Dank!

    Game-PC: i7 7600K, 16GB, GTX 1080, 960GB SSD, HP Omen X 35

  • also das Skript wird aus dem transmit.sh Skript gestartet, welches ich in /etc/init.d/ hinzugefügt habe.


    Das transmit.py Skript sollte lauffähig sein, das habe ich von meinem Vorgänger übernommen und sollte keine wesentlichen Änderungen machen müssen.


    Es handelt sich um die Software für eine Netzwerkdiode, die sollte aktiv sein, und eine neu hinzugefügte Datei erkennen und übertragen.

    Game-PC: i7 7600K, 16GB, GTX 1080, 960GB SSD, HP Omen X 35

  • Würde gerne helfen, aber


    ...ich hasse systemd...


    Trotzdem sollten im Perl Script etwas mehr Checks gemacht werden von wegen Directories und Files und entsprechend "sterben" -> or die(); ... wie Ruffy es schon erwähnt hat

  • Die Fehlermeldungen zeigen eindeutig das es sich um einen Fehler beim erstellen des Ordners handelt. Zuerst wird geprüft ob er existiert, was mit einem Fehler beendet wird wenn er nicht existiert, wenn er existiert schlägt das erstellen des Ordner fehl, weil er bereits existiert.

  • Ich bin ein Schritt vorwärtsgekommen, die transmit-Seite läuft jetzt. Ich musste den .Trash Ordner manuell löschen, das Skript bleibt sonst mit einer Fehlermeldung stecken. Das ist zwar keine echte Lösung, aber ich kann eher an meiner Arbeit weiterfahren.
    Das nächste Problem ist jetzt die Empfangsseite receive.py, dort ist der Status "active(exited)" und der sollte wohl auf "acvtive(running)" sein um konstant auf Empfang zu sein.
    Leider sind im Status keine Fehlermeldungen ersichtlich. Hat jemand vielleicht eine Idee?

    Game-PC: i7 7600K, 16GB, GTX 1080, 960GB SSD, HP Omen X 35

  • Normalerweise muss man bei Sockets auf der Serverseite, erst bind (initialisieren) , listen (damit er auf eingehende verbindungen hoert) und dann in einem Loop accept machen, oder gar accept und dann ein fork fuer parallele connections. Ich denke mal bei Python ist das nicht anders.


    accept ist ein blocking call, der dann erst returned wenn ein client zum server verbunden hat.


    Also wohl etwa so
    {code}
    s.bind()
    s.listen(1)


    while true
    conn, addr = s.accept()
    data = conn.recv(1024);


    {code}


    Btw, ich wuerde erst mal einfach receive.py und transmit.py in zwei terminal windows starten, um sicher zu gehen, dass die scripts ueberhaupt funktionieren, dann kannst du immer noch den server teil als service starten.

    Media: Synology 2x2TB , Popcorn v8, Sonos ZP120, ZP90, 2 Play5, 4 Play1
    Laptop: Thinkpad X220 - I7 , IPS, 16GB DDR3, 256GB SSD + PE4H + GTX580
    Coffee: DC Mini / 2x Vario v2 / Gene CBR-101