Beide Ausdrücke sehen nach einem Mittwochmorgen aus, und nur einer von ihnen bedeutet einmal. 0 10 * * 3 löst am Mittwoch um 10:00 aus; * 10 * * 3 löst in jeder Minute der zehnten Stunde aus, sechzig Gelegenheiten, denselben Tunnel zu starten. Ist der Befehl ein Starter, der keine bestehende Sitzung prüft, dann ist die zweite Variante kein Planungsfehler, sondern eine Schleife, die konkurrierende Eigentümer erzeugt. Lies das Minutenfeld, bevor du irgendetwas anderes liest.

Die fünf Felder sind Minute, Stunde, Tag des Monats, Monat und Wochentag, in dieser Reihenfolge, und ein Stern im ersten bedeutet jede Minute.

Das Minutenfeld entscheidet, wie oft

Die führende Zahl ist die Minute, 0 10 * * 3 ist also die erste Minute der zehnten Stunde am Mittwoch. Ersetzt man sie durch einen Stern, bleiben Stunde und Tag erhalten, und die Einmaligkeit fällt weg, was sechzig Treffer erzeugt. Cron entdoppelt nicht: jeder Treffer startet den Befehl erneut. Das ist keine Feinheit von Cron, sondern Feldsemantik, und die Referenz des installierten Schedulers lohnt sich, weil Feldreihenfolge und die optionale Benutzernamensspalte sich zwischen Benutzer- und System-Crontab unterscheiden.

Teste mit einem harmlosen Befehl, der über einen Tag hinweg seinen eigenen Zeitstempel schreibt. Eine Zeile im Log ist ein Zeitplan; sechzig Zeilen innerhalb einer Stunde sind eine Lektion.

Was ein zweiter Start mit dem ersten macht

Ein wohlerzogener Starter merkt, dass die Verbindung bereits steht, und tut nichts. Ein roher openvpn-Aufruf tut das nicht: er erzeugt einen weiteren Prozess, einen weiteren Versuch, ein Gerät oder einen Port zu binden, und einen weiteren Satz Routen, die um dieselben Ziele konkurrieren. Bei NetworkManager sind wiederholte Aktivierungsanforderungen für eine Verbindung meist idempotent, und genau deshalb bleibt das Problem verborgen, bis jemand einen anderen Befehl verwendet. Der Zeitplan sollte den Eigentümer fragen, der den Tunnel bereits verwaltet.

Entscheide dann, was eine Anforderung bedeutet, während die Verbindung im Aufbau ist. Weder doppelte Aktivierung noch eine Warteschlange ausstehender Starts ist offensichtlich richtig; wähle eines und lass den Starter es umsetzen, statt den Scheduler zufällig entscheiden zu lassen.

Zähle die Felder vor dem Befehl

Benutzer- und System-Crontab unterscheiden sich darin, ob vor dem Befehl eine Benutzernamensspalte steht. Ein zwischen ihnen kopierter Eintrag läuft entweder unter dem falschen Konto oder übergibt den Benutzernamen als erstes Wort des Befehls. Prüfe die installierte Referenz statt eines Leitfadens und zähle die Felder in deiner eigenen Zeile. Ein Eintrag mit fünf Feldern und einem sechsten Wort vor dem Befehl ist ein System-Crontab; dieselbe Zeile in einem Benutzer-Crontab versucht, dieses Wort als Programm auszuführen.

Die Ausführungsidentität trägt die Umgebung mit sich. Ein Cron-Job erbt keinen entsperrten Schlüsselbund, keine interaktive Passwortabfrage und nicht das Arbeitsverzeichnis, in dem du getestet hast.

Warte auf Bereitschaft, nicht auf die Uhr

Ein erfolgreicher Start ist kein funktionierender Tunnel. Der Client löst möglicherweise noch seinen Endpunkt auf, authentifiziert sich oder installiert Routen, wenn der Job bereits endet. Jede abhängige Aufgabe sollte auf die geschützte Ressource warten, die sie tatsächlich braucht, mit begrenztem Timeout und protokolliertem Fehlschlag, statt auf eine feste Anzahl von Sekunden. Dieser Unterschied trennt einen Zeitplan, der meistens funktioniert, von einem, der am geschäftigen Morgen still scheitert.

Ist zu dieser Stunde eine interaktive MFA nötig, kann der Job jemandes Aufmerksamkeit anfordern, aber nicht die Antwort liefern. Halte diesen Fall explizit, statt ein wiederverwendbares Passwort einzubetten oder endlos zu wiederholen.

Für eine wirklich einmalige Aktivierung nutze den unterstützten Einmal-Mechanismus. Eine wiederkehrende Regel, die man sich merken und entfernen muss, ist ein künftiger Doppelstart.

Ähnliche Artikel