Dit artikel geeft uitleg over het plannen van taken en het uitvoeren van scripts met regelmatige tussenpozen met behulp van cron-taken.
Wat is Cron?
Cron is een taakplanningsprogramma dat als een proces op de achtergrond draait. Het kan worden gebruikt om periodiek bepaalde taken uit te voeren die zijn gepland met behulp van de vooraf gedefinieerde set regels. Cron is vooraf geïnstalleerd op de meeste Linux-distributies of is beschikbaar in de repositories om handmatig te worden geïnstalleerd.
Cron-voorinstellingen
Cron op Ubuntu wordt geleverd met een set vooraf gedefinieerde planners. U kunt ze controleren door de onderstaande opdracht uit te voeren:
$ ls /etc/cron.*Gewoonlijk zijn deze mappen “/etc/cron.elk uur”, “/etc/cron.dagelijks”, “/etc/cron.maandelijks” en “/etc/cron.wekelijks".
Plaats gewoon uw gewenste scripts in een van deze mappen om geautomatiseerde taken elk uur, dagelijks, maandelijks of wekelijks uit te voeren.
Merk op dat cron standaard "/bin/sh" shell gebruikt. Als je "/bin/bash" als shell in cron-scripts wilt gebruiken, moet je "!# /bin/bash” hashbang bovenaan het scriptbestand of definieer shell als “SHELL=/bin/bash” variabele in de eerste regel in een gepland bash-script. Het negeren van de "SHELL"-omgevingsvariabele werkt ook voor de crontab-editor die hieronder wordt uitgelegd.
Mogelijk worden niet alle systeemomgevingsvariabelen blootgesteld aan de cron-taken. Het is dus over het algemeen een goed idee om belangrijke omgevingsvariabelen handmatig te definiëren in een script dat is gepland door cron.
Crontab
Met Crontab kunt u uw eigen geplande taken definiëren. Je kunt het gebruiken om cron-schema's te configureren die verschillen van de vier standaard cron-presets die hierboven zijn uitgelegd.
Om een geplande taak in crontab in te stellen, start u eerst de crontab-editor met behulp van de onderstaande opdracht:
$ crontab -eNu aan het einde van het bestand kunt u een item in de volgende indeling toevoegen:
minuut uur dag maand weekdag /vol/pad/naar/script.shWaar:
- minuut: elke waarde in het bereik van 0 tot 59
- uur: elke waarde in het bereik van 0 tot 23, waarbij 0 middernacht is
- dag: elke waarde in het bereik van 1 tot 31
- maand: elke waarde in het bereik van 1 tot 12
- weekdag: elke waarde in het bereik van 0 tot 6, waarbij 0 zondag is
Het onderstaande crontab-item maakt een screenshot van uw bureaublad en slaat deze eenmaal om 15:13 uur op 2 maart op in uw homedirectory plus elke dinsdag in maart om 15:13 uur.
13 15 2 3 2 scrotGebruik de onderstaande opdracht om alle crontab-items weer te geven:
$ crontab -lMeer voorbeelden
Cron-taken kunnen het beste worden uitgelegd aan de hand van voorbeelden, dus hieronder zijn enkele voorbeelden die periodiek schermafbeeldingen van uw bureaublad maken en deze in de thuismap opslaan.
Naast de vijf planningsvariabelen, gebruikt cron ook een speciale reeks om taken te plannen schedule. Deze snaren zijn:
- @hourly: de taak wordt elk uur uitgevoerd
- @daily / @midnight: er wordt elke dag gewerkt
- @weekly: taak wordt eenmaal per week uitgevoerd
- @maandelijks: taak wordt eenmaal per maand uitgevoerd
- @yearly / @anually: baan loopt een keer per jaar
- @reboot: taak wordt één keer uitgevoerd bij elke herstart / login
Het onderstaande crontab-item maakt één keer een screenshot bij elke herstart:
@reboot scrotU kunt "@reboot" vervangen door andere speciale tekenreeksen die hierboven zijn genoemd.
Als u een asterisk of jokerteken gebruikt in plaats van een van de vijf variabelen, wordt de taak herhaald op alle nieuwe instanties van die variabele. Het onderstaande item maakt elke minuut een screenshot:
* * * * * scrolElk uur:
0 * * * * scrolElke dag om 18:00 uur:
0 18 * * * scrolElke maand op de 6e om 18:00 uur:
0 18 6 * * scrolGebruik "/" om een script uit te voeren met een vast periodiek interval van 30 minuten (wordt elke 30 minuten uitgevoerd):
*/30 * * * * scrotU kunt door komma's gescheiden variabelen gebruiken om herhaalde uitvoering van scripts met regelmatige tussenpozen te definiëren. In het onderstaande voorbeeld wordt elke 1e, 4e en 5e minuut van een nieuw uur een screenshot van uw bureaublad gemaakt.
1,4,5 * * * * scrotCrontab-vermeldingen verifiëren
Het definiëren van crontab-items kan lastig zijn, maar het debuggen ervan of controleren of ze werken met de juiste tijdstempels is nog lastiger. Een optie is om een virtuele machine te gebruiken en tijdstempels te loggen van een script dat periodiek op een cron-taak wordt uitgevoerd door iets als de opdracht "date" op te nemen en de uitvoer om te leiden naar een tekstbestand. Een betere oplossing is echter om een van de vele online cron jobs-testservices te gebruiken die beschikbaar zijn op internet. Ik raad aan om de cron-testerwebsite beschikbaar te stellen hier een poging.
Conclusie
Het uitvoeren van cron-taken is een uitstekende manier om herhaalde taken te automatiseren, vooral op servers. De tool is extreem krachtig en aanpasbaar. Het is echter belangrijk om ervoor te zorgen dat uw plannerdefinitie correct werkt, vooral als er missiekritieke taken zijn.