Beide expressies lijken op een woensdagochtend, en slechts één ervan betekent één keer. 0 10 * * 3 wordt om 10:00 op woensdag uitgevoerd; * 10 * * 3 wordt elke minuut van het tiende uur uitgevoerd, zestig kansen om dezelfde tunnel te starten. Als de opdracht een starter is die niet controleert of er al een sessie is, dan is de tweede versie geen planningsfout, maar een lus die concurrerende eigenaren oplevert. Lees het minutenveld voordat je iets anders leest.

De vijf velden zijn minuut, uur, dag van de maand, maand en dag van de week, in die volgorde, en een ster in het eerste betekent elke minuut.

Het minutenveld bepaalt hoe vaak

Het voorste getal is de minuut, dus 0 10 * * 3 is de eerste minuut van het tiende uur op woensdag. Het vervangen door een ster behoudt het uur en de dag en laat de eigenschap eenmalig vallen, wat zestig overeenkomsten oplevert. Cron dedupliceert niet: elke overeenkomst start de opdracht opnieuw. Dat is geen finesse over cron, het is veldsemantiek, en de referentie van de geïnstalleerde planner is het lezen waard, omdat de veldvolgorde en de optionele gebruikersnaamkolom verschillen tussen gebruikers- en systeemcrontab.

Test met een onschadelijke opdracht die een dag lang zijn eigen tijdstempel vastlegt. Eén regel in het log is een planning; zestig regels binnen een uur is een les.

Wat een tweede start met de eerste doet

Een goed opgevoede starter merkt dat de verbinding al actief is en doet niets. Een rauwe openvpn-aanroep niet: die maakt een ander proces, nog een poging om een apparaat of een poort te binden, en nog een set routes die om dezelfde bestemmingen concurreren. In NetworkManager zijn herhaalde activeringsverzoeken voor één verbinding meestal idempotent, en dat is precies waarom het probleem verborgen blijft tot iemand een andere opdracht gebruikt. De planning zou de eigenaar moeten vragen die de tunnel al beheert.

Bepaal daarna wat een verzoek betekent terwijl de verbinding tot stand wordt gebracht. Noch dubbele activering noch een wachtrij van openstaande starts is duidelijk juist; kies er één en laat de starter het implementeren, in plaats van de planner bij toeval te laten beslissen.

Tel de velden vóór de opdracht

Gebruikers- en systeemcrontab verschillen erin of er een gebruikersnaamkolom vóór de opdracht staat. Een regel die daartussen wordt gekopieerd, draait of onder het verkeerde account of geeft de gebruikersnaam door als het eerste woord van de opdracht. Controleer de geïnstalleerde referentie in plaats van een gids, en tel de velden in je eigen regel. Een regel met vijf velden en een zesde woord vóór de opdracht is een systeemcrontab; dezelfde regel in een gebruikerscrontab probeert dat woord als programma uit te voeren.

De uitvoeringsidentiteit draagt de omgeving met zich mee. Een cron-taak erft geen ontgrendelde sleutelring, geen interactieve wachtwoordprompt en niet de werkmap waarin je hebt getest.

Wacht op gereedheid, niet op de klok

Een geslaagde start is geen werkende tunnel. De client is mogelijk nog zijn eindpunt aan het oplossen, aan het authenticeren of routes aan het installeren wanneer de taak eindigt. Elke afhankelijke taak zou moeten wachten op de beschermde bron die hij echt nodig heeft, met een begrensde time-out en een gelogde fout, in plaats van een vast aantal seconden. Dat onderscheid scheidt een planning die meestal werkt van een die stil faalt op de drukke ochtend.

Als op dat uur interactieve MFA nodig is, kan de taak iemands aandacht vragen maar niet het antwoord leveren. Houd dat geval expliciet in plaats van een herbruikbaar wachtwoord in te bouwen of eindeloos opnieuw te proberen.

Voor een echt eenmalige activering gebruik je het ondersteunde eenmalige mechanisme. Een terugkerende regel die je moet onthouden en verwijderen, is een toekomstige dubbele start.

Gerelateerde artikelen