LUG IN Stammtisch Reminder - Allgemeine Dokumentation
Contents
Einführung
Kurzbeschreibung
Jeder, der sich mit seiner E-Mailadresse in die LUG-IN Mailingliste eingetragen hat, soll am Freitag vorher, darüber informiert werden, dass am kommenden Montag wieder der zweiwöchige Stammtisch abgehalten wird. Natürlich soll dieser E-Mail zu entnehmen sein, wo und wann sich die Linux-Begeisterten Benutzer treffen. Man kann das manuell machen und jeden zweiten Freitag an die Mailingliste eine E-Mail schreiben oder es gibt ein Programm, dass diese Aufgabe erledigt. Genau das ist der LUG-IN Stammtisch Reminder.
Dieses kleine Programm wird jeden Freitag gestartet und prüft, ob eine ungerade Kalenderwoche vorliegt. Ist das der Fall, so wird eine vordefinierte E-Mail über den internen SMTP-Server verschickt. Zusätzlich gibt es die Funktion, einmalig eine Nachricht zu hinterlegen, die für die nächste „Erinnerungsaktion“ verschickt werden soll und danach gelöscht wird.
Internals
Damit jeder auch versteht wie der LUG-IN Stammtisch Reminder umgesetzt wurde, werden im nachfolgenden, technische Details des Programmes erläutert. Es wird auch detailliert auf das Verhalten eingegangen.
Technologien
Der LUG-IN Stammtisch Reminder ist ein Python 2.5.x-Skript, dass über den lokalen SMTP-Server exim4 E-Mails an den Mailverteiler mailman verschickt. Genauer gesagt, werden die E-Mails an die Adresse „ lug-in@lists.lug-in.de “ geschickt. Gestartet wird das Skript durch den lokalen cron-Daemon.
Dateien
In nachfolgender Tabelle sind die spezifischen Dateien aufgelistet. Man beachte, dass die Dateinamen für den Nachrichtentext je nach Konfiguration in der Skript-Datei variieren können.
Absoluter Dateiname |
Beschreibung |
/root/lugin-reminder/dontRemindThisTime |
Einmalige Blockerdatei ohne spezifischen Inhalt |
/root/lugin-reminder/dontRemindDates |
Datei in denen Datumswerte angeben, wann keine Erinnerung verschickt wird |
/root/lugin-reminder/lug-in-stammtisch-reminder.py |
Ausgeführte Skript-Datei (+Konfigdatei) |
/root/lugin-reminder/specialreminder.txt |
Einmalig zu schickender Nachrichtentext |
/root/lugin-reminder/defaultreminder.txt |
Standardnachrichtentext |
/var/log/lugin-stammtisch-reminder.log |
Log-Datei mit Statusmeldungen |
/etc/cron.d/lug-in-stammtisch-reminder |
Cron-Job Definition |
Konfiguration
In der Skript-Datei steht im Kopf der Quelltextdatei, wie dieses Python-Skript zu konfigurieren ist und was dabei beachtet werden muss. Nichtsdestotrotz werden hier die Konfigurationsmöglichkeiten nochmals erklärt.
Option |
Beschreibung |
EinmalverhinderDatei |
Existiert diese Datei (mit welchem Inhalt auch immer), wird das Versenden einmalig verhindert. Danach wird die Datei gelöscht. |
VerhinderListenDatei |
In dieser Datei stehen die Tage als Datumswert (im ISO Format yyyy-MM-dd), an denen der Versand verhindert wird. |
Textdatei |
In dieser UTF-8 kodierten Textdatei steht der Nachrichtentext, der im Normalfall verschickt werden soll. |
Alternative Textdatei |
In dieser UTF-8 kodierten Textdatei steht der Nachrichtentext, der im Spezialfall verschickt werden soll. |
Betreff |
Der Betreff der E-Mail |
An |
An welche Adresse soll die E-Mail verschickt werden (im Normalfall „ lug-in@lists.lug-in.de “ ) |
Von |
„Von“-Feld der E-Mail Nachricht |
SMTP-Server |
IP-Adresse oder Hostname des SMTP-Servers |
SMTP-Benutzer |
(nicht benötigt auf localhost) |
SMTP-Passwort |
(nicht benötigt auf localhost) |
Anmerkung zur "VerhinderListenDatei"
Eine Beispieldatei würde so aussehen:
# Zeilen die mir einem 'Hash'-Zeichen('#') beginnen werden ignoriert
# Am 18. Februar 2045 wird keine Erinnerung verschickt
2045-02-18
Konfiguration mittels einer Konfigurationsdatei
Wenn im selben Verzeichnis wie die Skriptdatei eine Datei mit Namen lugin-reminder.conf existiert, dann wird versucht, Einstellungen im INI-Textdateiformat aus dieser Datei zu lesen.
Hier ist ein Beispiel einer gültigen lugin-reminder.conf-Datei:
[addresses] from: sender@senderhost.eu to: receiver@receiverhost.org [connection] smtp-server: smtp.senderhost.eu smtp-user: sirius smtp-password: <secret> [content] body-file: defaultreminder.txt alternate-body-file: specialreminder.txt [skip] one-time-skip-file: dontRemindThisTime skip-list-file: dontRemindDates [misc] dry-run: yes log-file: lugin-stammtisch-reminder.txt
Erklärung der Abschnitte/Optionen
Abschnitt/Option |
Erklärung |
Gültige Werte |
addresses |
Beinhaltet Adressinformationen |
N/A |
from |
Absender |
[E-Mail Adressen] |
to |
Empfänger |
[E-Mail Adressen] |
connection |
Verbindungseinstellungen |
N/A |
smtp-server |
Hostname des zu verwendenden SMTP-Servers |
[gültige DNS-Namen] |
smtp-user |
Benutzername des zu verwenden SMTP-Kontos auf dem Server |
[Benutzernamen] |
smtp-password |
Passwort des SMTP-Kontos |
[Passwörter] |
content |
Einstellungen zum Inhalt der E-Mail |
N/A |
body-file |
Textdatei die den Nachrichtentext enthält |
[absolute Pfadangabe mit Dateiname] |
alternate-body-file |
Textdatei die den bevorzugten Nachrichtentext enthält |
[absolute Pfadangabe mit Dateiname] |
skip |
Einstellungen zum verhindern von E-Mail Sendungen (z. B. wenn Stammtische ausfallen) |
N/A |
one-time-skip-file |
EinmalVerhinderDatei |
[absolute Pfadangabe mit Dateiname] |
skip-list-file |
VerhinderListenDatei |
[absolute Pfadangabe mit Dateiname] |
misc |
diverse andere Einstellungen |
N/A |
dry-run |
"Simulationslauf" normales verhalten nur nicht Senden |
(yes|no) |
Programm
Start
Das LUG-IN Stammtisch Reminder Python-Skript „lug-in-stammtisch-reminder.py“ wird durch den lokalen cron-Daemon gestartet, genauer beschrieben funktioniert das so:
Der cron-Daemon wird bei Systemstart geladen und kann zu einem festgelegten Zeitpunkt Programme starten. Um dem Daemon diesen Startzeitpunkt und den Befehl mitzuteilen, werden sogenannte Cron-Jobs verwendet (siehe Linux Manual Pages mit 'man 5 crontab' oder mit Google). Das sind einfache Textdateien, in denen man den Zeitpunkt/-intervall und den zu startenden Befehl definieren kann. Systemweite Jobs sind im Normalfall unter /etc/cron.d/ oder in /etc/crontab abgespeichert. Zusätzlich kann man auch bequem Shell-Skripte in die Unterordner /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly und /etc/cron.monthly speichern um eine wiederkehrende Ausführung des Shell-Skriptes zu erreichen.
Im Rahmen des LUG-IN Stammtisch Reminders gibt es einen Cron-Job /etc/cron.d/lug-in-stammtisch-reminder in dem festgelegt ist, dass der Befehl "/usr/bin/python /root/lugin-reminder/lug-in-stammtisch-reminder.py" jeden Freitag ausgeführt werden soll.
Verhalten
Bekannte Bugs