2017-06-27 4 views
0

ich ein Python-Skript eine Schleife wie folgt enthält:Erstellen Sie einen Dienst für ein Python-Skript

while True: 
    if p.poll(waitTime): 
     if j.process() == journal.APPEND: 
      for entry in j: 
       process_data(entry)) 

, mein Service wie folgt aussehen Derzeit:

[Unit] 
Description=Journald shipper 
Requires=systemd-journald.service 
After=systemd-journald.service 

[Service] 
Type=forking 
ExecStart=/usr/bin/myScript.py 

[Install] 
WantedBy=multi-user.target 

Das Problem zur Zeit ich habe, ist die Der Befehl «start» gibt ein Timeout zurück. Das logisch, weil Skript ist nie fertig, aber der Service beginnt nie :(

Also gehe ich davon aus ich tue Dinge falsch. Habe ich die .service Datei ändern müssen Skript zu ermöglichen, läuft ohne warten Ende oder muss ich meine «unendliche» Schleife ändern?

Und wie kann ich dies tun?

+1

'wenn p.poll (waitTime):' ist falsch. Es sollte prüfen, ob das Skript beendet wurde, aber es schlägt fehl, wenn das Skript mit einem Rückgabecode von null fehlschlägt. Do 'wenn p.poll (waitTime) ist nicht None:' stattdessen. –

Antwort

0

ich denke, einige zusätzliche Informationen über Ihre Plattform richtig notwendig sein kann, diese zu beantworten. ich sage nur, weil ich mich nicht persönlich kennen die Formatierung des Dienstes, den Sie dort haben

Wenn Sie jedoch eine reine Python-Methode verwenden möchten, können Sie das Paket daemonocle verwenden, um den Dienst zu erstellen. https://pypi.python.org/pypi/daemonocle

alternativ und die Art und Weise, dass ich diese Aufgabe normalerweise erreichen, können Sie ein Deamon Skelett wie diese verwenden: https://gist.github.com/shawnrice/11076762
mit dieser Methode müssen Sie diese Vorlage ändern Ihr Skript ausführen und installieren Sie es in/etc/init.d nach der ersten Ausführung auf dem Deamon-Skript sollten Sie in der Lage sein, den Standard "Dienst" zu verwenden, um Ihren Dienst zu steuern.

+0

Hier ist das Skript, das ich starten möchte: https://github.com/chindit/journald-shipper Ich führe es auf einem ArchLinux up-to-date – chindit

Verwandte Themen