Tag 4 Periodischer Start auf Mac - ralfw/emailwiedervorlage GitHub Wiki
Der Service funktioniert, wenn er einmal läuft. Nun muss er auch noch laufen - und zwar auf meinem Mac. Das soll periodisch sein, z.B. alle 15 Minuten.
Dazu muss ich sicherstellen, dass der Service unter Mono funktioniert. Mono sollte dafür auch unter Win installiert sein, um dort sofort zu prüfen, ob das VS.NET Compilat darauf läuft.
Für den Mac muss ich erforschen, wie ein periodischer Start möglich ist.
Und wenn der Service schon im Hintergrund läuft, dann sollte er ein Log schreiben, in dem ich sehen kann, was er getan hat bzw. wann etwas schief gelaufen ist.
Falls keine Internetverbindung besteht, sollte das jedoch nicht zu einem Crash der Anwendung führen. Das ist ja ein vorhersehbares Problem, solange der Dienst lokal läuft. Also muss darauf geprüft und bei Unverfügbarkeit "sanft gelandet" werden.
Reflexion
Der Dienst läuft auch mit Mono unter Win und Mac. Nur bei der Prüfung, ob das Internet verfügbar ist, gab es ein Rechteproblem mit der Ping-Klasse.
Für die periodische Ausführung habe ich länger herumprobiert. Zuerst schien crontab/CronniX passend, dann Lingon. Am Ende habe ich es dann doch nur mit CronniX zum Laufen gebracht. Ich habe den Dienst nun für Ausführung alle 20 Minuten geplant. Ein Eintrag in crontab sieht dann so aus:
25 * * * * /Users/ralfw/Projects/.../deploy/runonmono.mac.command
Davon muss es 3 geben, die die Minutenangaben 5, 25 und 45 haben. crontab vergleicht die aktuelle Uhrzeit dann mit dem Muster aus Zahlen und Sternen. Eine Wiederholungsangabe wie /5 (für "alle 5 Minuten") scheint unter Mac OS nicht zu funktioneren.
Um auf dem Mac die Quellen nicht erneut übersetzen zu müssen, habe ich ein deploy-Verzeichnis eingerichtet. Wenn ich unter Win meine, dass Binaries stabil sind, kopiere ich sie dahinein und bekomme sie dann auch in den Repo-Clone auf dem Mac.
Allerdings muss darin eine eigene .gitignore liegen, um unnötige bzw. sensible Dateien auszuschließen.
Beim Logging und der Verbindungsprüfung habe ich mich gefragt, ob ich den besten Weg gehe. Soll ich Trace Sources einsetzen oder log4net oder selbst basteln? Ist die Verbindungsprüfung so einfach/verlässlich wie möglich?
Am Ende findet sich immer einer, der einen besseren Ansatz kennt. Muss ich mich deshalb schämen bzw. bis zum Optimum forschen? Nein, ich denke, es reicht, wenn ich einen derzeit genügend guten Ansatz habe - den ich aber kapsele. Denn wenn ich diese Aspekte sauber freistelle, dann kann ich jederzeit bei neuen Erkenntnissen den Ansatz überarbeiten. Bei der Internetprüfung habe ich das auch tun müssen, weil Ping sich als untauglich für Mono herausstellte.