Python automatisieren

Hallo liebe Python-Experten :smile:
ich hab ein Python-Skript geschrieben diese liest eine Datei aus und wenn die Variable sich in der Datei ändert soll etwas gemacht werden.Die Konsole mit der Variable kommt vom Server und ich bin der Client, kann ich dieses Python-Skript irgendwie Automatisieren das es läuft ohne das ich auf der Bash Datei.py eingebe.Ich arbeite übrigens auf Linux Ebene mit Open-Suse für Antworten wäre ich euch sehr Dankbar
Liebe Grüße und einen wunderschönen Start in die Neue Woche
bluecrystal

hallo,

das ist keine Python-Frage, sondern eine Linux-Frage, gell?

Du musst das Script auf dem Linux-Rechner auf der du es ausführen willst automatisch ausführen lassen. Dafür eignes sich z.B. die sog. „crontab“:

 man crontab

kurz zusammengefasst
eingeben

 crontab -e

dann zeile einfügen, z.b.

 \* \* \* \* \* python Datei.py

das führt dann das script jede Minute einmal aus, Fehlerausgaben landen leider irgendwo im System, das ist etwas doof. Diagnose ist schwierig, daher googlen.

ich kenn mich mit cron und suse nicht so aus, kann mich aber erinnern, dass „anacron“ moderner ist, und auch recht weit verbreitet. kannst du mal googlen, oder „man anacron“ probieren, ob das auf deinem system ginge, und wenn ja wie.

andere möglichkeiten wären z.B. mit einer schleife und „nohup“, z.B.:

 nohup ( while true ; do python Datei.py ; sleep 60 ; done ) &

die schleife führt alle 60 sekunden dein script aus, in den klammern steht es, damit es in einer subshell ausgeführt wird („man bash“). diese subshell kann man dann mit nohup so starten, dass sie weiterläuft, wenn man sich ausloggt (nohup = no hang-up, „man nohup“).
das ist aber ziemlich „dreckig“ und nicht auf dauer zu empfehlen.

das gleiche kannst du natürlich auch dann gleich in python machen, dass sich das script einfach nie selbst beendet, und es selbst mit nohup dann starten. in etwa so:

--- datei.py ---
import time

def main():
 # ... hier code ...

while True:
 main()
 time.sleep(60.0) # 60 seconds?
-------------

und dann

 nohup python datei.py &

fertig. aber wie gesagt, nohup ist keine schöne Lösung.

tschau, towi.

Hi,

du könntest einen Cron-Job einrichten, der sagen wir mal alle 5 Minuten die Datei ausführt.
Dazu auf der Konsole ‚crontb -e‘ eingeben und dann ganz unten eine neue Zeile mit ‚*/5 * * * * Datei.py‘ einfügen.

Grüße
CrizZ

Hallo bluecrystal,

wenn ich die Frage richtig verstanden habe, würde ich sagen: entweder eine Endlosschleife in das Script einbauen oder in Linux einen cron-job einrichten, der das Script in regelmäßigen Abständen startet.

HTH

Greetings!

John

Hi Bluecrystal,

es gibt da mehrere Moeglichkeiten.

Wie oft soll das Script denn gerufen werden?
Wenn es z.B. minuetlich gerufen werden soll, dann wuerde ich Dir empfehlen das Linux crontab zu benutzen, indem Du z.B. folgenden EIntrag in deine /etc/crontab hinzufuegst:

* * * * * root python scipt.py

die sternchen geben an, wann das script gerufen wird, als naechstes kommt der user (sollte wohl am besten nicht root sein :wink:), und dann folgt der Befehl. In diesem Beispiel wuerde das Script vom user root jede Minute gerufen. Die genaue Syntax der Sternchen kannst Du im Internet nachlesen (Google nach „cron syntax“).

Wenn dir eine Minute als Aufloesung nicht genuegt, dann musst Du aus dem Script ein Daemon-Programm machen, dass quasi kontinuierlich laeuft und selbst alle paar Sekunden bestimmte funktionen ruft. Wenn Du dahingehend Hilfe brauchst, sag bescheid. Mit der Cron-Loesung solltest Du aber im Grunde gut bedient sein.

Gruss,
Marc

ich muss dich leider enttäuschen ich muss das so in python implementieren x.x