rc.local [Errno -3] Temporary failure in name resolution

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    Ich hoffe auf diesem Weg zu einer Lösung zu gelangen. Seid längerem versuche ich einen Autostart von einem python-Programm über die rc.local Datei zurealisieren.

    In der dazugehörigen Log-Datei des Python Skripts wird folgende Exception ausgegeben: [Errno -3] Temporary failure in name resolution

    Über systemctl status rc-local wird dies ausgegeben:

    Mich verwundert nur, das das Programm einwandfrei manuell startet aber nicht über die rc.local Datei.

    Vielen Dank im voraus,

    JackerNils

  • rc.local [Errno -3] Temporary failure in name resolution? Schau mal ob du hier fündig wirst!

  • Hallo,

    rc.local ist der veraltete Weg und das `sleep` ist ein Würg-Around.

    Wie du ja siehst, wird rc.local von systemd interpretiert. Also kannst du statt rc.local auch den aktuellen / zeitgemäßen Weg über eine systemd Service Unit nehmen. Darin kannst du über die passenden Direktiven auch selber festlegen, wann dein Skript gestartet wird - ohne drauf hoffen zu müssen, dass deine `sleep` Zeit lang genug ist usw.

    Außerdem kannst du über systemd auch so Sachen wie automatischen Neustart des Skripts im Falle eines Crashs regeln usw.

    Gruß, noisefloor

  • Hallo,

    Ich habe mich nun an systemd herangewagt. Das Programm wird auch ordnungsgemäß ausgeführt, jedoch wird nicht auf die Internetverbindung gewartet.

    Folgendes ist meine main.service Datei in /lib/systemd/system/:

    Auch in der Log-Datei ist ein Networkfehler zuerkennen.

    Gruß

    Nils

  • Habe nun in meinem Python-Skript folgende Zeilen vorausgesetzt:

    Code
    connected = False
    response = ""
            while connected == False:
                    try:
                        response = urllib2.urlopen('http://216.58.192.142',timeout=1)
                        logger.info("Internet-Verbindung vorhanden!")
                        connected = True
                    except urllib2.URLError as error :
                        logger.debug("Keine Verbindung! " + str(response) + "  " + str(error))
  • Hallo,

    ok - wobei ein passende Direktive in der ServiceUnit "stilvoller" ist :)

    Zum Skript:

    Eingerückt wird immer mit vier Leerzeichen, nicht mit 8.

    Zeile 2 ist sinnlos, kannst du löschen.

    Verwendest du `response` später irgendwo? Sonst kannst du in Zeile 5 den Rückgabewert auch an die "Wegwerfvariable" _ (Unterstrich) binden.

    Strings formatiert man mit der `format` Methode, nicht mit + Zeichen.

    Gruß, noisefloor

  • Hallo,

    eure Kritik kann ich durchaus nachvollziehen.

    Das muss korrekterweise while connected is False: oder besser noch while not connected: heißen!

    :thumbup:

    Bedeutet konkret:

    Python
    logger.debug("Keine Verbindung! {0}  {1}".format(response, error))

    Da kann ich nur entgegenwenden, dass ich jahrelang Java gelernt habe und ich mir nun Python mehr oder weniger zusammen würfel. :D

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!