[gelöst] Shutdown Hook mit Python

  • Moin moin,


    ich schreibe an einem Shutdown-Hook mit Python. Damit verbinde ich mich per TCP/IP mit einem Server der ständig läuft. An diesen Server sende ich die wake-up Zeit.
    Nach Ablauf der Zeit wird dann per Wake-On-Lan der VDR gestartet.


    Das funktioniert auch sehr gut, nur schaltet sich der VDR nicht aus, obwohl ich das Script mit sys.exit(0) beende.


    So rufe ich meinen Server auf:


    Code
    ....
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = (HOST, PORT)
    sock.connect(server_address)
    ....


    Kann es sein, dass ich in einem Shutdown Hook keine Socket-Aufrufen absetzen darf? Oder funktioniert es grundsätzlich nicht mit Python?


    Gruß Dietrich

  • Meinst du einen Shutdown-Hook wie er bei den Debian/Ubuntu/yaVDR-Paketen zum Einsatz kommt oder übergibst du dem VDR das Python-Skript als Shutdown-Skript mit dem Argument "-s shutdownscript"?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • ich kopiere das Script nach /usr/share/vdr/shutdown-hooks/S90.wakeup.py


    Dort wird es bei shutdown mit den Parametern:


    (1) next timer in seconds (from 1970/01/01)
    (2) next in seconds from now
    (3) next title
    (4) shutdown forced


    aufgerufen. Ich beende das Script mit sys.exit(0)

  • Was steht denn im Syslog? Eventuell gibt es einen weiteren Shutdown-Hook, der den Shutdown verhindert.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hier ein syslog Auszug:



    Es ist das einzige Script war unter
    /usr/share/vdr/shutdown-hooks
    aufgerufen wird.


    Alles was unter:
    ....vdr S90.apu-wakeup: ....
    aufgeführt ist schreibe ich im Script ins syslog.


    (S90.apu-wakeup ist das Python script.)

  • Code
    Sep 26 16:39:42 vdr S90.apu-wakeup: ['/usr/share/vdr/shutdown-hooks/S90.apu-wakeup', '1474913520', '12738', '5', 'Wem die Stunde schl\xc3\xa4gt', '1']
    Sep 26 16:39:42 vdr S90.apu-wakeup: Next Wake UP in seconds: 12738 seconds
    Sep 26 16:39:42 vdr S90.apu-wakeup: normal en

    d


    Kannst du mal zeigen, wie das Skript das genau ausgibt (print, logging-Modul, usw.)?
    Hintergrund ist, dass das vdr-shutdown-Skript ein eval auf die Ausgabe des Skripts anwendet und dessen Exit-Code prüft: https://anonscm.debian.org/cgi…e/debian/vdr-shutdown#n26 - nicht dass es sich daran verschluckt.


    Ansonsten wäre es interessant, wie die SHUTDOWN_CMD Umgebungsvariable in dem Skript vdr-shutdown aussieht: https://anonscm.debian.org/cgi…e/debian/vdr-shutdown#n54 - wie startest du den VDR (SysVinit, Upstart, Systemd) und woher stammen die Pakete?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • danke @seahawk1986 für all die Hilfe. Interessant ist das script zur Ausführung der shutdown hooks. Um es zu verstehen benötige ich etwas Zeit. Ich melde mich wieder.


    Hier die Ausgabe ins syslog:


    Code
    time_abs = sys.argv[1]
    time_rel =  sys.argv[2]
    title = sys.argv[3]
    
    
    syslog.syslog(str(sys.argv))
    s = "Next Wake UP in seconds: " + time_rel + " seconds"
    syslog.syslog(s)
    syslog.syslog('normal end')
  • Hast Du mal versucht, das Script über "-s /my/path/to/shutdownscript", statt über die shutdown-hooks aufzurufen?


    Alternativ gäbe es die Möglichkeit, das über einen wrapper via atd zu entkoppeln: at now -f /my/path/to/shutdownscript


    Christian

  • Hallo an alle die geholfen haben:


    Fehler gefunden: seahawk1986 gab den entscheidenden Tipp. Im shutdown script wird ein eval mit dem Return-Wert von meinem Python Script ausgeführt. Und das sind alle meine Print-Ausgaben von Python. Und daran "hat er sich verschluckt".


    Nach dem Auskommentieren aller Prints wurde der VDR-Shutdown ordnungsgemäß durchgeführt.


    Vielen Dank und Gruss
    Dietrich

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!