Dies ist eine mobil optimierte Seite, die schnell lädt. Wenn Sie die Seite ohne Optimierung laden möchten, dann klicken Sie auf diesen Text.

NO-IP Account-Renew Script 1.0

    Nobody is reading this thread right now.
Ich habe jetzt mal alles zusammen in das zwischezeitlich um exteren Konfiguration erweiterte Skript gepackt. Ist noch ungetestet!
Wenn man keine Mail senden Will, muss amn nur die Variable SMTPSERVER = "" setzen, dann endet das Skript vor dem Mailversand.
Außerdem ist die Konfiguration der Use/Pass Kombinationen für NoIP und eMail in die externe Datei NOIP_Account_Renew.py gewandert.

Hier nun die komplette Version:
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
### *|--------------------------------|* ###
### *| NO-IP Account-Renew Script 1.0 |* ###
### *|   (c) by DarkStarXxX @ DEB     |* ###
### *|--------------------------------|* ###
# Modifiziert von MegaV0lt @ DEB
# Modifiziert von SLASH @ DEB
VERSION=161020.3

# Wichtiger Hinweis:
# Die Login-Daten für No-IP und eMail werden aus der Datei 'NOIP_Account_Renew.py'
# gelesen. Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
# USERNAME, PASSWORD, FROMADRESS und TOADRESS

import mechanize
import NOIP_Account_Renew  # Datei "NOIP_Account_Renew.py"
import time
import ssl
if hasattr(ssl, '_create_unverified_context'):
  ssl._create_default_https_context = ssl._create_unverified_context

# Vorgaben
HOST_URL = "https://www.noip.com/members/dns/"
LOG_FILE = "/var/log/NOIP_renew.log"
SMTPSERVER = ""                     # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = ""                       # SMTP-Port (Z. B. 25)
RESULT_STR = []

# Funktion: Update host
def update_host(str_host, brow):
  global RESULT_STR
  brow.select_form(nr=00)
  brow.submit()
  # Check if OK
  ts = time.strftime("%d.%m.%Y %H:%M:%S")  # Zeitstempel für das Log (19.10.2016 12:51:30)
  f1 = open(LOG_FILE, 'a+')
  host_id = after(str_host, "?")           # Alle Zeichen nach dem ?
  if brow.response().read().find("Update will be applied") >= 0:
    print >> f1,ts,host_id + " [OK]"       # Ausgabe in das Log
    print(host_id + " [OK]")               # Ausgabe auf der Konsole (und cron)
    RESULT_STR.append(host_id + " [OK]")   # Für die eMail
  else:
    print >> f1,ts,host_id + " [FAILED]"
    print(host_id + " [FAILED]")
    RESULT_STR.append(host_id + " [FAILED]")
  return

# Funktion after - Liefert Zeichenkette nach Zeichen a
def after(value, a):
  # Find and validate first part
  pos_a = value.rfind(a)
  if pos_a == -1: return ""
  # Returns chars after the found string.
  adjusted_pos_a = pos_a + len(a)
  if adjusted_pos_a >= len(value): return ""
  return value[adjusted_pos_a:]

# Browser options
br = mechanize.Browser()
br.set_handle_equiv(True)
br.set_handle_robots(False)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.addheaders = [('User-agent', 'Chrome')]
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# Start
print "NO-IP Account-Renew Script #%s" % VERSION
from NOIP_Account_Renew import *  # Username, Passwort und eMail-Daten laden
USERNAME = NOIP_Account_Renew.USERNAME
PASSWORD = NOIP_Account_Renew.PASSWORD
FROMADDR = NOIP_Account_Renew.FROMADRESS
TOADDR = NOIP_Account_Renew.TOADRESS

# Seite öffnen
br.open(HOST_URL)

# Login
br.select_form(nr=0)
br.form["username"] = USERNAME
br.form["password"] = PASSWORD
br.submit()

br.find_link(text='Manage Hosts')
req = br.click_link(text='Manage Hosts')
br.open(req)

# Links in Array speichern
mylink = []  # Leeres Array
for link in br.links():
  if link.text == 'Modify':
    mylink += [link]

# Links klicken und Updaten
for link in mylink:
  req = br.click_link(link)
  br.open(req)
  update_host(link.url, br)

# Please set SMTPSERVER = "" if you don't like to send a Status Mail
if not SMTPSERVER:
  quit()

####### SMTP Section ############
# Sending Result e-Mail

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

msg = MIMEMultipart()

msg['From'] = FROMADDR
msg['To'] = TOADDR
msg['Subject'] = "NO-IP Account Updater"

body = "NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile\n\n"
for var in RESULT_STR:
  body = str(body)+str(var) + "\n"
  msg.attach(MIMEText(body, 'plain'))

filename = "NO-IP_updater.log"
attachment = open(LOG_FILE, "rb")

part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)

msg.attach(part)

# Example: Server Address and TCP Port - Exmaple: '192.168.1.1' , 25
server = smtplib.SMTP(SMTPSERVER, SMTPPORT)
server.starttls()

# In case server needs Authentication, uncomment below line - remove #
#server.login(FROMADDR, "password")

text = msg.as_string()
server.sendmail(FROMADDR, TOADDR, text)
server.quit()

Man könnte noch die Variablen SMTPSERVER und SMTPPORT in die externe Datei auslagern...

Die momentane Konfigurationsdatei:
Code:
# No-IP-Daten
USERNAME = ""
PASSWORD = ""
# eMail-Daten
FROMADRESS = ""
TOADRESS = ""

Testlauf:
root auf HP-T5730 am 20.10.2016 17:39
[~] # python /mnt/usbdrive/sbin/NOIP-Account-Renew
NO-IP Account-Renew Script #161020.3
host_id=**90 [OK]
host_id=**97 [OK]
host_id=**07 [OK]
 
Zuletzt bearbeitet:
Wir sind schon echt geil
Das ganze sollte jetzt noch in git damit wir den Überblick behalten......
Aber sieht schonmal gut aus Werde nachher mal testen.....

und ja:
SMTPSERVER = " "
SMTPPORT = " "
Sollte auch noch in die config Datei ausgelagert werden...


und ausserdem ist die Schleife irgendwie kaputt gegangen
Schau was ich per mail jetzt bekomme:
NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile

host_id=620*** [OK]


NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile

host_id=620*** [OK]
host_id=39130*** [OK]


NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile

host_id=620*** [OK]
host_id=39130*** [OK]
host_id=1******* [OK]


NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile

host_id=620*** [OK]
host_id=3913**** [OK]
host_id=1284**** [OK]
host_id=5028**** [OK]


NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile

host_id=620*** [OK]
host_id=3913**** [OK]
host_id=1284**** [OK]
host_id=5028**** [OK]
host_id=5077**** [OK]
 
Zuletzt bearbeitet:
OK, Habe SMPTSERVER, SMTPPORT und MAILPASS auch in die externe Datei gepackt. Für MAILPASS gilt das gleiche wie für SMTPSERVER: Wenn es nicht gesetzt ist (""), dann wird es deaktiviert. Der eMailtext müsst eauch gehen. Dadurch, dass der Quelltext falsch gepostet wurde, waren die Einrückungen weg.

Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
### *|--------------------------------|* ###
### *| NO-IP Account-Renew Script 1.0 |* ###
### *|   (c) by DarkStarXxX @ DEB     |* ###
### *|--------------------------------|* ###
# Modifiziert von MegaV0lt @ DEB
# Modifiziert von SLASH @ DEB
VERSION=161021

# Wichtiger Hinweis:
# Die Login-Daten für No-IP und eMail werden aus der Datei 'NOIP_Account_Renew.py'
# gelesen. Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
# USERNAME, PASSWORD, FROMADRESS, TOADRESS, SMTPSERVER, SMTPPORT und MAILPASS

import mechanize
import NOIP_Account_Renew  # Datei "NOIP_Account_Renew.py"
import time
import ssl
if hasattr(ssl, '_create_unverified_context'):
  ssl._create_default_https_context = ssl._create_unverified_context

# Vorgaben
HOST_URL = "https://www.noip.com/members/dns/"
LOG_FILE = "/var/log/NOIP_renew.log"
RESULT_STR = []

# Funktion: Update host
def update_host(str_host, brow):
  global RESULT_STR
  brow.select_form(nr=00)
  brow.submit()
  # Check if OK
  ts = time.strftime("%d.%m.%Y %H:%M:%S")  # Zeitstempel für das Log (19.10.2016 12:51:30)
  f1 = open(LOG_FILE, 'a+')
  host_id = after(str_host, "?")           # Alle Zeichen nach dem ?
  if brow.response().read().find("Update will be applied") >= 0:
    print >> f1,ts,host_id + " [OK]"       # Ausgabe in das Log
    print(host_id + " [OK]")               # Ausgabe auf der Konsole (und cron)
    RESULT_STR.append(host_id + " [OK]")   # Für die eMail
  else:
    print >> f1,ts,host_id + " [FAILED]"
    print(host_id + " [FAILED]")
    RESULT_STR.append(host_id + " [FAILED]")
  return

# Funktion after - Liefert Zeichenkette nach Zeichen a
def after(value, a):
  # Find and validate first part
  pos_a = value.rfind(a)
  if pos_a == -1: return ""
  # Returns chars after the found string.
  adjusted_pos_a = pos_a + len(a)
  if adjusted_pos_a >= len(value): return ""
  return value[adjusted_pos_a:]

# Browser options
br = mechanize.Browser()
br.set_handle_equiv(True)
br.set_handle_robots(False)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.addheaders = [('User-agent', 'Chrome')]
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# Start
print "NO-IP Account-Renew Script #%s" % VERSION
from NOIP_Account_Renew import *  # Username, Passwort und eMail-Daten laden
USERNAME = NOIP_Account_Renew.USERNAME
PASSWORD = NOIP_Account_Renew.PASSWORD
FROMADDR = NOIP_Account_Renew.FROMADRESS
TOADDR = NOIP_Account_Renew.TOADRESS
SMTPSERVER = NOIP_Account_Renew.SMTPSERVER
SMTPPORT = NOIP_Account_Renew.SMTPPORT
MAILPASS = NOIP_Account_Renew.MAILPASS

# Seite öffnen
br.open(HOST_URL)

# Login
br.select_form(nr=0)
br.form["username"] = USERNAME
br.form["password"] = PASSWORD
br.submit()

br.find_link(text='Manage Hosts')
req = br.click_link(text='Manage Hosts')
br.open(req)

# Links in Array speichern
mylink = []  # Leeres Array
for link in br.links():
  if link.text == 'Modify':
    mylink += [link]

# Links klicken und Updaten
for link in mylink:
  req = br.click_link(link)
  br.open(req)
  update_host(link.url, br)

####### SMTP Section ############
if not SMTPSERVER:
  quit()

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

msg = MIMEMultipart()

msg['From'] = FROMADDR
msg['To'] = TOADDR
msg['Subject'] = "NO-IP Account Updater"

body = "NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile\n\n"
for var in RESULT_STR:
  body = str(body)+str(var) + "\n"

msg.attach(MIMEText(body, 'plain'))

filename = "NO-IP_updater.log"
attachment = open(LOG_FILE, "rb")

part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)

msg.attach(part)

# Example: Server Address and TCP Port - Exmaple: '192.168.1.1' , 25
server = smtplib.SMTP(SMTPSERVER, SMTPPORT)
server.starttls()

# Server verlangt Autentification (Nur wenn MAILPASS gesetzt ist)
if MAILPASS:
  server.login(FROMADDR, MAILPASS)

text = msg.as_string()
server.sendmail(FROMADDR, TOADDR, text)
server.quit()
# No-IP-Daten
USERNAME = ""
PASSWORD = ""
# eMail-Daten
FROMADRESS = ""
TOADRESS = ""
SMTPSERVER = "" # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = "" # SMTP-Port (Z. B. 25)
MAILPASS = "" # Server verlangt Autentification
 
Sorry MegaV0lt.....hab vergessen daß das Python ist....sind die Einrückungen tatsächlich verschütt gegangen.
Ich finde deine Idee mit der externen Konfig eigentlich ganz gut und habe es auch erfolgreich getestet.
Für die jenigen die es aber lieber haben alles in einer Datei zu haben, habe ich hier auch noch einmal eine Version, die den kompletten Konfig Bereich ganz oben im Script hat, man muss also nicht im Script selbst suchen, um Parameter zu ändern.
Als Variablen stehen nun folgende Werte zur Verfügung:

USERNAME = "username" # Der NO-IP.com Login Name
PASSWORD = "password" # Das NO-IP.com Passwort
LOG_FILE = "/var/log/NOIP_renew.log" # Ort des Logfiles auf dem System
LOG_FILENAME = "NOIP_renew.log" # Anzeigename des Logfiles in der E-Mail
FROMADDR = "from@address.com" # Absender e-Mail Adresse
TOADDR = "to@address.com" # Empfaenger e-Mail Adresse
MAIL_SUBJECT = "NO-IP Account Updater" # Betreff der Status Mail
MAIL_BODY = "NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile" # Text in der E-Mail
SMTPSERVER = "192.168.1.1" # SMPT Server an den die Status Mail ausgeliefert werden soll - Wenn leer, dann keine Mail
SMTPPORT = "25" # TCP Port des SMTP Servers. In der Regel Port "25"
SMTP_PASSWORD = "" # Wenn Authentifizierung am SMTP Server , dann Auth Password

Anleitung
1. Datei auf den Raspberry zb nach /root kopieren
2. unzip /root/no-ip_updater.zip
3. nano /root/no-ip_updater.py
2. Oben im Konfig Bereich des Scripts die NoIP Account Info und SMTP Settings eintragen
3. Anschließend mit sudo chmod +x /root/no-ip_updater.py die Datei ausführbar machen
4. Im Cron 2 Mal im Monat ausführen
sudo crontab -e
0 6 1,15 * * /root/Scripts/no-ip_updater.py > /dev/null 2>&1

an jedem 1. und 15 Tag im Monat um 6:00 Morgens wir das Script ausgeführt

5. Testen des Scripts mit dem Befehl: /root/Scripts/no-ip_updater.py

Das Script funktioniert für mich, kann sogar 5 Dyn Domänen updaten und kann eine Status Mail versenden, wenn SMTPSERVER nicht leer ist. Es kann Authentifizierung am SMTP Server, wenn SMTP_PASSWORD nicht leer ist.
Der Ort des Logfiles kann nun auch geändert werden.
Vielen Dank nochmal an DarkStarXxX und MegaV0lt.

Status Mail
NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile

OK host.php?host_id=620****
OK host.php?host_id=3913****
OK host.php?host_id=1284****
OK host.php?host_id=5028****
OK host.php?host_id=5077****

Und da ich zu blöd bin hier das Python Script samt Einrückungen zu veröffentlichen, habe ich nun einfach die komplette Datei ZIP gepackt hier hingelegt
 

Anhänge

Du musst angemeldet sein, um die Anhangsliste zu sehen.
Zuletzt bearbeitet:
Klasse! Das hat mich dazu inspiriert, ein "AllInOne"-Skript zu basteln. Man kann die Variablen im Skript setzen oder die externe Datei verwenden. Gesteuert wird das über CONFIG_FILE. Wenn leer werden die Skriptvariablen verwendet.
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
### *|--------------------------------|* ###
### *| NO-IP Account-Renew Script 1.0 |* ###
### *|   (c) by DarkStarXxX @ DEB     |* ###
### *|--------------------------------|* ###
# Modifiziert von MegaV0lt @ DEB
# Modifiziert von SLASH @ DEB
VERSION=161025

# Wichtiger Hinweis: Externe Konfiguration
# Die Login-Daten für No-IP und eMail können aus einer externen Datei, welche in
# der Variable "CONFIG_FILE" definiert werden muss gelesen werden.
# Besonderheit: Die Datei im Dateisystem muss die Endung ".py" haben.
# Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
CONFIG_FILE = "NOIP_Account_Renew"  # Ohne .py (Im gleichen Verzeichnis wie das Skript!)
# Kann abgeschaltet werden, in dem man CONFIG_FILE = "" setzt. In dem Fall die
# Variablen hier ausfüllen!
USERNAME = ""    # No-IP Benutzername
PASSWORD = ""    # No-IP Passwort
FROMADRESS = ""  # eMail-Sender
TOADRESS = ""    # eMail-Empfänger
SMTPSERVER = ""  # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = ""    # SMTP-Port (Z. B. 25)
SMTPPASS = ""    # Server verlangt Autentification ("" zum deaktivieren)

# Vorgaben
LOG_FILE = ""  # Kein Log, wenn nächste Zeile auskommentiert ist
#LOG_FILE = "/var/log/NOIP_renew.log"  # Dateiname wird auch für die eMail verwendet
MAIL_SUBJECT = "NO-IP Account Updater"  # Betreff der Status eMail
MAIL_BODY = "NO-IP Account Updater Service updated your NO-IP Account for another 30 days.\nPlease check the attached Logfile\n\n"  # Text in der eMail
HOST_URL = "https://www.noip.com/members/dns/"
RESULT_STR = []

import importlib
import mechanize
import time
import ssl
if hasattr(ssl, '_create_unverified_context'):
  ssl._create_default_https_context = ssl._create_unverified_context

# Funktion: update_host - Für jeden Host "Modify" klicken
def update_host(str_host, brow):
  global RESULT_STR
  brow.select_form(nr=00) ; brow.submit()
  # Check if OK
  if LOG_FILE:
    ts = time.strftime("%d.%m.%Y %H:%M:%S")  # Zeitstempel für das Log (19.10.2016 12:51:30)
    f1 = open(LOG_FILE, 'a+')
  host_id = after(str_host, "?")             # Alle Zeichen nach dem ?
  if brow.response().read().find("Update will be applied") >= 0:
    if LOG_FILE: print >> f1,ts,host_id + " [OK]"  # Ausgabe in das Log
    print(host_id + " [OK]")                 # Ausgabe auf der Konsole (und cron)
    RESULT_STR.append(host_id + " [OK]")     # Für die eMail
  else:
    if LOG_FILE: print >> f1,ts,host_id + " [FAILED]"
    print(host_id + " [FAILED]")
    RESULT_STR.append(host_id + " [FAILED]")
  return

# Funktion: after - Liefert Zeichenkette nach Zeichen a
def after(value, a):
  # Find and validate first part
  pos_a = value.rfind(a)
  if pos_a == -1: return value  # Nicht gefunden: Ganzer Wert zurück!
  # Returns chars after the found string.
  adjusted_pos_a = pos_a + len(a)
  if adjusted_pos_a >= len(value): return ""
  return value[adjusted_pos_a:]

# Browser options
br = mechanize.Browser()
br.set_handle_equiv(True)    ; br.set_handle_robots(False)
br.set_handle_redirect(True) ; br.set_handle_referer(True)
br.addheaders = [('User-agent', 'Chrome')]
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

### Start
print "NO-IP Account-Renew Script #%s" % VERSION
if CONFIG_FILE:
  myconf = importlib.import_module(CONFIG_FILE, package=None)
  USERNAME = myconf.USERNAME     ; PASSWORD = myconf.PASSWORD
  FROMADRESS = myconf.FROMADRESS ; TOADRESS = myconf.TOADRESS
  SMTPSERVER = myconf.SMTPSERVER ; SMTPPORT = myconf.SMTPPORT
  SMTPPASS = myconf.SMTPPASS

# Seite öffnen
br.open(HOST_URL)

# Login
br.select_form(nr=0)
br.form["username"] = USERNAME ; br.form["password"] = PASSWORD
br.submit()

br.find_link(text='Manage Hosts')
req = br.click_link(text='Manage Hosts')
br.open(req)

# Links in Array speichern
mylink = []  # Leeres Array
for link in br.links():
  if link.text == 'Modify': mylink += [link]

# Links klicken und Updaten
for link in mylink:
  req = br.click_link(link)
  br.open(req)
  update_host(link.url, br)

####### SMTP Section ############
if not SMTPSERVER: quit()  # Nur wenn SMTPSERVER gesetzt ist

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

msg = MIMEMultipart()

msg['From'] = FROMADRESS ; msg['To'] = TOADRESS
msg['Subject'] = MAIL_SUBJECT

body = MAIL_BODY
for var in RESULT_STR:
  body = str(body) + str(var) + "\n"

msg.attach(MIMEText(body, 'plain'))

if LOG_FILE:
  filename = after(LOG_FILE, "/")  # Dateiname ohne Pfad
  attachment = open(LOG_FILE, "rb")
  part = MIMEBase('application', 'octet-stream')
  part.set_payload((attachment).read())
  encoders.encode_base64(part)
  part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
  msg.attach(part)

# Example: Server Address and TCP Port - Exmaple: '192.168.1.1' , 25
server = smtplib.SMTP(SMTPSERVER, SMTPPORT)
server.starttls()

# Server verlangt Autentification (Nur wenn SMTPPASS gesetzt ist)
if SMTPPASS: server.login(FROMADRESS, SMTPPASS)

text = msg.as_string()
server.sendmail(FROMADRESS, TOADRESS, text)
server.quit()

Code:
# No-IP-Daten
USERNAME = ""
PASSWORD = ""
# eMail-Daten
FROMADRESS = ""
TOADRESS = ""
SMTPSERVER = ""  # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = ""    # SMTP-Port (Z. B. 25)
SMTPPASS = ""    # Server verlangt Autentification
Konsolenausgabe:
Code:
root auf HP-T5730 am 21.10.2016 15:25
[~] # python /mnt/usbdrive/sbin/NOIP-Account-Renew
NO-IP Account-Renew Script #161021.3
host_id=**90 [OK]
host_id=**97 [OK]
host_id=**07 [OK]
Edit 25.10.2016: Skriptupdate - LOG_FILE ist nun abschaltbar (Praktisch, wenn man z. B. cron zum Mailversand verwendet)
 
Zuletzt bearbeitet:
super...so muss es sein......

So und wenn du mir noch ganz zum Schluss verrätst, wie du die Einrückungen im Spoiler hin bekommst dann hast du gewonnen
Mir fällt jetzt nichts mehr ein, was ich noch verbessern könnte.
Btw: die Idee mit den ausgelagerten Config Informationen finde übrigens richtig gut, so kann man das eigentliche Script updaten, ohne daß jedesmal die Config Info's neu eingetragen werden müssen. Aber da es bei diesem Script tatsächlich irgendwann nichts mehr zu Verbessern gibt (?), können Diese dann schon rein, so daß man im Script Ordner nicht so viele kleine Config Dateien rumliegen hat, bei denen man nicht weiss wo die hingehören.
Das letzte was man noch machen könnte, damit alles sein Ordnung hat wäre, daß DarkStarXxX das Script oder den Spoiler in den ersten Post übernimmt Aber DarkStarXxX liesst ja irgendwie nicht mehr mit ?
 
Hallo MegaV0lt
Bekomme folgenden Fehler, wenn ich die Option nutze, die Config Daten nicht aus zu lagern. Die Config Datei existiert überhaupt nicht in diesem Fall

Im Script sieht es so aus:
# Vorgaben
CONFIG_FILE = "" # Ohne .py (Im gleichen Verzeichnis wie das Skript!)

Das Ergebnis:
######################################
NO-IP Account-Renew Script #161021.3
Traceback (most recent call last):
File "./no-ip_updater.py", line 232, in <module>
myconf = importlib.import_module(CONFIG_FILE, package=None)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named NOIP_Account_Renew
#######################################

Erstelle ich ihm die Datei NOIP_Account_Renew.py (damit er sie hat)
kommt folgende Meldung:
NO-IP Account-Renew Script #161021.3
Traceback (most recent call last):
File "./no-ip_updater.py", line 233, in <module>
USERNAME = myconf.USERNAME ; PASSWORD = myconf.PASSWORD
AttributeError: 'module' object has no attribute 'USERNAME'

jetzt regt er sich auf, daß meine Datei leer ist
Idealerweise sollte sie aber gar nicht vorhanden sein müssen, wenn CONFIG_FILE = ""
Allerdinss wird die Mail korrekt versendet und auch das Updaten klappt.
Wenn man das aber per cron aufruft und nach /dev/null umleitet ist ja alles gut
 
Zuletzt bearbeitet:
Zum testen hab ich mal das gemacht:
Code:
# Start
print "NO-IP Account-Renew Script #%s" % VERSION
CONFIG_FILE = ""
if CONFIG_FILE:
  print CONFIG_FILE + " is set!"
  myconf = importlib.import_module(CONFIG_FILE, package=None)
  USERNAME = myconf.USERNAME     ; PASSWORD = myconf.PASSWORD
  FROMADRESS = myconf.FROMADRESS   ; TOADRESS = myconf.TOADRESS
  SMTPSERVER = myconf.SMTPSERVER ; SMTPPORT = myconf.SMTPPORT
  SMTPPASS = myconf.SMTPPASS

print CONFIG_FILE + " not set!"
quit()
dann kommt:
root auf HP-T5730 am 21.10.2016 16:55
[~] # python /mnt/usbdrive/sbin/NOIP-Account-Renew
NO-IP Account-Renew Script #161021.3
not set!
Bist Du sicher, dass die Einrückungen nach if CONFIG_FILE stimmen?

PS: das mit dem Code geht so: (SPOILER="# Start")(CODE)...Quellcode(/CODE)(/SPOILER)
Du musst alles in CODE Posten und das wiederum in Spoiler. ( duch [ ersetzen

PPS: Der Fehler ist in Zeile 232! Kann das sein... Bei mir ist das ganze nur 152 Zeilen lang
 
Zuletzt bearbeitet:
PPS: Der Fehler ist in Zeile 232! Kann das sein... Bei mir ist das ganze nur 152 Zeilen lang
....ja was soll ich sagen......
Ich habe von der Arbeit aus eine SSH Verbindung auf meinen BananaPi zu hause und probiere alles dort aus.
Es kann nicht anders sein, als daß beim Copy&Paste da irgendwas geprellt hat, oder ich bin der größte Hornochse hier......
Klar, hab ich den Code doppelt drin.....Nach "Reparatur" alles gutr es läuft mit und ohne Config File
Super.
Das einzige was ich jetzt noch machen möchte ist, Dein letztes Update: VERSION=161021.3
Hier als File an zu hängen. Ich hoffe das ist okay so, denn für manche ist es einfacher ein File herunter zu laden

File:
 

Anhänge

Du musst angemeldet sein, um die Anhangsliste zu sehen.
Ich habe ja erst vor zwei Tagen angefangen mich mit dem python zu beschäftigen. Da es aber ganz gut zu funktionieren scheint, denke ich, wir können das so lassen. Die Hauptarbeit hat ja @DarkStarXxX gemacht. Einen herzlichen Dank an alle die hier mitgearbeitet haben!

@DarkStarXxX
Wäre schön, wenn Du das Skript aus den Beiträgen (#80 bzw. #84 - Beide gleich) hier auf der ersten Seite verlinken würdest.
 
Leider wird das Script über einen Croneintrag bei mir nicht mehr ausgeführt. Manuell geht es. Er lautet folgendermaßen:

0 6 1,15 * * /home/scripts/Oscam/NOIP-Account-Renew

Die Datei hat die Rechte 755. Jemand eine Idee (IPC)?
 
Vielleicht findet er Python nicht. Gib mal Python mit Pfad an

0 6 1,15 * * /usr/bin/python /home/scripts/Oscam/NOIP-Account-Renew
 
Zuletzt bearbeitet:
Hi. Erst mal vielen Dank für das Skript.
Bei mir läuft es unter xpenology und das Update funktioniert. Beim Mailversand treten aber Probleme auf:
Code:
NO-IP Account-Renew Script #161021.3
host_id=31330251 [OK]
host_id=30897053 [OK]
host_id=30962292 [OK]
Traceback (most recent call last):
  File "/volume2/data/noip_update/no-ip_updater.py", line 143, in <module>
    server = smtplib.SMTP(SMTPSERVER, SMTPPORT)
  File "/usr/lib/python2.7/smtplib.py", line 256, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python2.7/smtplib.py", line 317, in connect
    (code, msg) = self.getreply()
  File "/usr/lib/python2.7/smtplib.py", line 368, in getreply
    raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
Port ist 465, Smtp-Server und pass in der externen config stimmen. Jemand ne Idee?

grüße
 
Hast du die Möglichkeit mal einen anderen Mailserver zu nutzen,eventuell einen der "normal" auf Port 25 hört?
Die Verbindung wurde offensichtlich plötzlich unterbrochen.
Alternativ versuche ich dann mal einen Mailserver der smtps spricht zu nutzen.
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…