Systemd-timers gebruiken als vervanging voor cron-jobs

Systemd-timers gebruiken als vervanging voor cron-jobs
Een foto van een vrouw die een wekker vasthoudt terwijl ze achter een laptop zit.

Als Linux-gebruiker bent u waarschijnlijk bekend met cron. Het heeft jarenlang gewerkt als de go-to Unix time-based job scheduler. Nu gebruiken veel gebruikers Systemd-timers om de dominantie van cron te vervangen. Dit artikel bespreekt de basisprincipes van het instellen van uw eigen systemd-timer en zorgt ervoor dat deze correct op uw systeem draait.

Waarom Systemd-timers gebruiken in plaats van Cron?

Een van de grootste verkoopargumenten van Systemd Timers is dat het volledig geïntegreerd is in het Systemd-ecosysteem. Dit betekent dat het heel eenvoudig is om verschillende Systemd-service-eenheden te plannen en te koppelen, waardoor het eenvoudiger is om taken te automatiseren in vergelijking met een traditionele cron-daemon.

Een terminal die een systeemservice weergeeft met behulp van een Systemd-timer.

Een ander voordeel van Systemd Timers ten opzichte van Cron is dat het meer gedetailleerde controle biedt over hoe uw geplande taken worden geactiveerd. Systemd Timers hebben bijvoorbeeld een OnBootSecvariabele, waarmee u uw service-eenheid kunt vertragen totdat een bepaalde hoeveelheid tijd verstrijkt na een succesvolle boot.

Een terminal met een voorbeeld van een timerconfiguratie met een speciale triggervariabele.

Ten slotte zijn Systemd Timers ook ongelooflijk nauwkeurig vergeleken met een standaard cron daemon. Standaard kan het taken tot op een microseconde volgen en uitvoeren met behulp van zijn AccuracySecvariabele. Dit is ongelooflijk handig als u een computer gebruikt die exacte timings vereist voor zijn geplande taken.

Systemd-timers installeren

Timers zijn een ingebouwde functie van Systemd. Dit betekent dat als u Systemd gebruikt als uw init-daemon, zoals het geval is met populaire Linux-distributies zoals Arch, Fedora en Ubuntu, uw machine al gebruikmaakt van deze functie op sommige van zijn systeemprocessen.

Om te controleren of uw distributie Systemd draait, kunt u de volgende opdracht uitvoeren:

Als u dit doet, wordt een lijst weergegeven van alle Systemd-eenheden, apparaten en timers die momenteel op uw systeem actief zijn.

Een terminal met de uitvoer van de systemctl-opdracht op een Systemd-gebaseerde Linux-distributie.

Lijst met bestaande timers

De eenvoudigste manier om te controleren of er een timer loopt op uw huidige gebruikersaccount, is met de volgende opdracht:

U kunt de --allvlag ook gebruiken om elke afzonderlijke timer in het systeem te controleren, inclusief de inactieve:

Als u dit doet, worden de datum en tijd afgedrukt waarop elke timer wordt geactiveerd, de aftelling tot dat punt, hoeveel tijd er is verstreken sinds de laatste keer dat de timer is geactiveerd, de naam van de timer zelf en de service die elke timereenheid activeert.

Een terminal met een lijst van alle actieve Systemd-timers in de huidige sessie.

Een nieuwe service en timer maken

De eerste stap bij het maken van een Systemd-timer is het maken of vinden van een bestaande service om deze aan te koppelen. Dit komt omdat elke timer aan een bovenliggende service-eenheid moet worden gekoppeld. Deze sectie begeleidt u door het proces van het maken van een timer voor een aangepaste Systemd-service.

Begin met het aanmaken van de lege bestanden “.service” en “.timer” in uw thuismap:

Open uw nieuwe servicebestand met uw favoriete teksteditor:

Plak de volgende sjabloon in uw nieuwe servicebestand:

Sla uw “.service”-bestand op en open vervolgens uw lege “.timer”-bestand met dezelfde teksteditor:

Plak het volgende codeblok in uw timerbestand:

Ga naar de [Timer]sectie en vervang de waarde van de OnCalendarvariabele met de datum en tijd waarop u wilt dat uw Systemd-eenheid wordt uitgevoerd. In mijn geval wil ik dat mijn programma elke dag precies om 11:43 uur wordt uitgevoerd.

Een terminal die de aangepaste timerwaarde voor de variabele OnCalendar markeert.

Een monotone timer maken

Naast het instellen van een timer die op een specifieke datum loopt, is het ook mogelijk om een ​​monotone timer te maken die relatief loopt ten opzichte van de huidige uptime van uw computer. Dit is handig als u een taak plant op een machine die niet constant draait, zoals op een desktop of laptop.

Om te beginnen opent u uw “.timer”-bestand en scrolt u naar beneden naar de [Timer]sectie.

Een terminal die de locatie van de

Verwijder zowel de OnCalendaren Persistentvariabelen, voeg vervolgens OnBootSeceen tijdsinterval toe voor wanneer u uw unitbestand wilt uitvoeren. Bijvoorbeeld, door het in te stellen op “1hr” zal Systemd vertellen om uw opdracht te starten een uur nadat uw computer succesvol is opgestart.

Een terminal die de variabele OnBootSec markeert en de oorspronkelijke timingvariabelen van het aangepaste timerbestand vervangt.

Voeg de OnUnitActiveSecvariabele net onder OnBootSectoe en geef vervolgens het interval op waarmee u wilt dat uw timer continu wordt uitgevoerd nadat uw systeem is opgestart. In mijn geval stel ik het in op “30min” omdat ik wil dat mijn taak elke 30 minuten wordt uitgevoerd na de eerste uitvoering.

Een terminal die de variabele OnUnitActiveSec markeert, die de single-run timer omzet in een monotone timer.

Een tijdelijke timer maken

Een van de voordelen van Systemd Timer dat diep is geïntegreerd in Systemd is dat het kan profiteren van de andere aangrenzende programma’s van de init daemon. Het is bijvoorbeeld mogelijk om timers te gebruiken met Systemd-run om eenmalige tijdelijke taken op uw machine te maken.

Om een ​​eenvoudige tijdelijke timer te maken, plakt u de volgende regel code in een terminalsessie en vervangt u de waarde van de --on-calendarvariabele door het interval waarop u uw opdracht wilt uitvoeren:

Voeg de opdracht die u wilt uitvoeren toe aan het einde van de regel en druk op Enterom de opdracht te plannen.

U kunt ook tijdelijke monotone timers maken met behulp van de variabelen --on-booten --on-unit-active:

Controleer of uw tijdelijke timer nu in de wachtrij van de taakplanner van Systemd staat door de volgende opdracht uit te voeren:

Een terminal die de status weergeeft van een transiënte timer die in het systeem is geladen.

De Systemd-timer uitvoeren

Om uw nieuwe Systemd Timer uit te voeren, moet u ervoor zorgen dat deze correct is geladen op uw huidige Systemd-sessie. Kopieer hiervoor zowel uw aangepaste service als timerbestand naar de servicedirectory van uw Systemd:

Laad de huidige configuratie van de init-daemon opnieuw:

Activeer zowel de service als de timer die u hebt gemaakt met systemctl:

Controleer of u uw nieuwe timer correct hebt geladen door het volgende uit te voeren: sudo systemctl status my-new-timer.timerop een nieuwe terminalsessie. In dit geval kunt u zien dat mijn timer nu is gepland en voorbereid om door het systeem te worden uitgevoerd.

Een terminal die het timerbestand toont dat op het huidige systeem wordt uitgevoerd.

Leren hoe u taken kunt plannen met behulp van Systemd Timers is slechts een onderdeel van het begrijpen hoe uw Linux-machine onder de motorkap werkt. Duik dieper in de interne werking van dit geweldige besturingssysteem door ons vergelijkingsartikel over Grub en Systemd-boot te bekijken.

Afbeelding tegoed: Alexandr Podvalny via Unsplash . Alle wijzigingen en screenshots door Ramces Red.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *