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
Python Skript als Dienst unter Linux
-
-
Was meinst Du mit "im Status"? Und wie lauten die Fehlermeldungen?
-
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 subdirIch denke der Status "active(exited)" bedeutet nichts gutes?
Vielen Dank!
-
Zeig noch die .service definition mit der du das script ausführst.
active(exited) heisst eigentlich das das skript zu ende ausgeführt wurde und keinen Fehler zurückgegeben hat.Edit: Du musst prüfen ob ein Ordner existiert, bevor du versuchst darauf zuzugreifen: https://stackoverflow.com/ques…nd-create-it-if-necessary
-
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.
-
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? -
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.