Laten we eens kijken naar crontab, de commando’s en de verschillende bewerkingen die met crontab geassocieerd worden.
We zullen leren hoe we taken kunnen plannen met het hulpprogramma cron, en als laatste zullen we ook enkele van de online hulpprogramma’s bespreken die ons helpen bij het formatteren en testen van de cron-opdrachten.
Oorsprong
Crontab staat voor“cron tabel“. Het woord cron komt van het Griekse woord Chronos dat tijd betekent. Crontab is een systeemdaemonproces dat automatisch bepaalde taken en opdrachten uitvoert volgens de geplande tijd.
Gebruik
Crontab is handig om verschillende bewerkingen uit te voeren, zoals het maken van geautomatiseerde back-ups, het roteren van logbestanden, het synchroniseren van bestanden tussen externe machines en het leegmaken van tijdelijke mappen, enz. Crontab kan voor elk soort werk gebruikt worden, maar het wordt vooral nuttig wanneer we te maken krijgen met systeembeheer.
Met behulp van cron kan een beheerder een taak inplannen om op een bepaalde tijd en dag uit te voeren.
Laten we eens kijken hoe we dit kunnen instellen.
Crontab Syntaxis
Om een lijst met opdrachten uit te voeren, leest het hulpprogramma cron de configuratiebestanden. Om de regels in de configuratietabellen van crontab te interpreteren, volgt het een Crontab-syntaxis. Crontab heeft zes velden, en de eerste vijf(1-5) velden definiëren de datum en tijd van uitvoering. Het laatste veld, d.w.z. het 6e veld, kan een gebruikersnaam en/of een uit te voeren taak /job/commando/script zijn.
* * * * USER_NAME UIT TE VOEREN OPDRACHT/SCRIPT
│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_ ________ Dag van de week (0 – 6) (0 is zondag, of gebruik namen)
│ │ │ |____________ Maand (1 – 12),* betekent elke maand
│ │ |______________ Dag van de maand (1 – 31),* betekent elke dag
│ |________________ Uur (0 – 23),* betekent elk uur
|Minuut (0 – 59), * betekent elke minuut
Opmerkingen:
- Een sterretje (*) wordt gebruikt om alle mogelijke waarden voor een veld te matchen. Bijvoorbeeld, een sterretje in het veld uur is gelijk aan elk uur of een sterretje in het veld maand is gelijk aan elke maand.
- gebruikersnaam is optioneel (alleen beschikbaar als het het crontab-bestand van het systeem is)
Voorbeelden:
Laten we de bovenstaande syntaxis begrijpen met enkele voorbeelden
1. Plan een cron om dagelijks om 5 uur ‘s ochtends uit te voeren
0 5 * * * /scripts/job.sh
2. Plan een cron om twee keer per dag om 6 uur ‘s ochtends en 6 uur ‘s avonds uit te voeren
0 6,18 * * * /scripts/job.sh
3. Plan een cron om elke minuut uit te voeren
* * * * /scripts/job.sh
4. Plan een cron om elke maandag om 7 PM uit te voeren.
0 19 * * mon /scripts/job.sh
5. Plan een cron om elke 15 minuten uit te voeren.
*/10 * * * /scripts/job.sh
6. Plan een cron om uit te voeren op geselecteerde maanden
* * feb,jun,oct * /script/job.sh
7. Voer het shellscript /home/script/backup.sh
op 4 maart om 7:25 uur uit
25 7 4 3 * /home/script/backup.sh
8. Plan een cron om elke 30 seconden uit te voeren
Aangezien we geen controle hebben over de seconden in de Crontab, kunnen we dit wel bereiken via het onderstaande proces in twee stappen.
- Laten we eerst een taak plannen die elke minuut wordt uitgevoerd.
* * * * /home/scripts/script.sh
- Laten we nu het commando
sleep
gebruiken om de uitvoering 30 seconden te pauzeren.
* * * * sleep 30; /home/scripts/script.sh
De bovenstaande opdracht zal de uitvoering gedurende 30 seconden stoppen, en daarna weer hervatten.
Type Cron-configuratiebestanden
Er zijn twee soorten Cron-configuratiebestanden:
De UNIX/Linux systeem Crontab
Hiervoor is rootprivilege nodig omdat het meestal gebruikt wordt voor systeemservices en kritieke taken. Het zesde veld (in de bovenstaande syntaxisbeschrijving) is de naam van een gebruiker voor de opdracht om als uit te voeren. Dit geeft system crontab de mogelijkheid om opdrachten als elke gebruiker uit te voeren.
De gebruiker crontab
Gebruikers kunnen ook hun eigen cronjobs installeren met het commando crontab. Ook hier is het zesde veld (in de bovenstaande syntaxisbeschrijving) het uit te voeren commando, en alle commando’s worden uitgevoerd als de gebruiker die de crontab heeft aangemaakt.
Elke gebruiker kan zijn eigen crontab-bestand hebben, en hoewel dit bestanden zijn in /var/spool/cron/crontabs
, zijn ze niet bedoeld om direct bewerkt te worden. We moeten het crontab commando gebruiken om onze eigen cron jobs te bewerken of in te stellen.
Hoe werkt het?
De cron-service (daemon) draait op de achtergrond en controleert voortdurend (elke minuut) het bestand /etc/crontab
en de mappen /etc/cron.*/
. Het controleert ook de /var/spool/cron/
directory.
Commando’s worden door cron uitgevoerd als de minuten-, uren- en maandvelden overeenkomen met de huidige tijd, en minstens één van de tweedaagse velden (dag van de maand of dag van de week) overeenkomt met de huidige dag.
Basisopdrachten
Bestaande Cronjobs weergeven
We kunnen een lijst maken van alle Cron-taken zonder het crontab-configuratiebestand te openen met de volgende opdracht
crontab -l
Als er geen bestaande taak is, wordt de uitvoer als volgt weergegeven
[geekflare@localhost ~]# crontab -l
geen crontab voor geekflare
[geekflare@localhost ~]#
Als de gebruiker al enkele taken heeft toegevoegd, wordt dit als volgt weergegeven.
[geekflare@localhost ~]# crontab -l
# Bewerk dit bestand om taken in te voeren die door cron uitgevoerd moeten worden.
#
# Elke uit te voeren taak moet gedefinieerd worden via een enkele regel
# die met verschillende velden aangeeft wanneer de taak uitgevoerd zal worden
# en welk commando uitgevoerd moet worden voor de taak
#
# Om de tijd te definiëren kunt u concrete waarden opgeven voor
# minuut (m), uur (h), dag van de maand (dom), maand (mon),
# en dag van de week (dow) of gebruik '*' in deze velden (voor 'any').#
# Merk op dat taken gestart worden op basis van de cron's systeem
# daemon's notie van tijd en tijdzones.
#
# Uitvoer van de crontab-taken (inclusief fouten) wordt via
# e-mail naar de gebruiker gestuurd bij wie het crontab-bestand hoort (tenzij omgeleid).
#
# U kunt bijvoorbeeld elke week om 5 uur een back-up van al uw gebruikersaccounts
# uitvoeren met:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# Zie voor meer informatie de handleidingpagina's van crontab(5) en cron(8)
#
# m h dom mon dow commando
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[geekflare@localhost ~]# [geekflare@localhost ~]#]
Cron-tabel is gebruikersspecifiek, wat betekent dat u moet zijn ingelogd met een specifieke gebruiker om de lijst met cron-tabellen te zien.
Cron voor bepaalde gebruiker weergeven
Om geplande taken van een andere gebruiker weer te geven, gebruikt u de optie -u(Gebruiker) en -l(Lijst).
crontab -u andere_gebruikersnaam -l
Voorbeeld: crontab -u geekflare -l
Crontab-vermeldingen toevoegen/wijzigen
Om de crontabvermelding te bewerken, kunnen we de optie -e
gebruiken, zoals hieronder weergegeven.
crontab -e
De bovenstaande opdracht opent de vi editor waar u de details van de opdracht opgeeft en het bestand opslaat. Eenmaal opgeslagen, kunt u met crontab -l
controleren of cron is geconfigureerd of niet.
Crontab-items voor bepaalde gebruiker toevoegen/wijzigen
We kunnen de crontab voor een andere gebruiker bewerken met de volgende opdracht
crontab -u andere_gebruikersnaam -e
Voorbeeld: crontab -u geekflare -e
Crontab-invoer verwijderen
Gebruik de <strong>-r</strong>
parameter in Crontab om volledige geplande taken zonder bevestiging uit crontab te verwijderen
crontab -r
Als u bevestiging wilt voordat u geplande taken verwijdert, gebruik dan de optie <strong>-i</strong>
met -r
, die de gebruiker om bevestiging vraagt voordat de crontab van de gebruiker wordt verwijderd.
crontab -i -r
[geekflare@localhost ~]# crontab -i -r
crontab: echt de crontab van geekflare verwijderen?
Crontab speciale string
Naast de bovenstaande syntaxis die we hebben besproken, kunnen we ook acht speciale strings gebruiken die Crontab biedt. Dit bespaart ons niet alleen tijd, maar verbetert ook de leesbaarheid.
Speciale string | Beschrijving |
@reboot | Eenmalig uitvoeren, na het opstarten. |
@yearly | Eén keer per jaar uitvoeren, d.w.z., 0 0 1 1 * |
@jaarlijks | Zelfde als @yearly |
@maandelijks | Eens per maand uitvoeren, d.w.z., 0 0 1 * * |
@weekly | Eén keer per week uitvoeren, dus 0 0 * * 0 |
@dagelijks | Eén keer per dag uitvoeren, dus 0 0 * * |
@middernacht | Zelfde als @daily |
@uurlijk | Eén keer per uur uitvoeren, dus 0 * * * * |
Crontab Speciale String Voorbeelden
1. Crontab om taken op jaarbasis te plannen
@yearly /scripts/groet.sh
We kunnen het bovenstaande uitvoeren om een nieuwjaarsgroet te versturen, het zal op de eerste minuut van elk jaar worden uitgevoerd.
2. Crontab om taken in te plannen die maandelijks worden uitgevoerd.
@maandelijks /scripts/cleanup.sh
We kunnen het bovenstaande uitvoeren om aan het begin van elke maand enkele opruimactiviteiten uit te voeren.
Op dezelfde manier kunnen we andere speciale Crontab-strings gebruiken voor wekelijkse, dagelijkse en uurlijkse doeleinden.
Cron Directory
De systeembeheerder kan een systeembreed cron-schema gebruiken dat onder de vooraf gedefinieerde cron-directory valt, zoals hieronder weergegeven
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.maandelijks
- /etc/cron.weekly
Crontab Realtime Voorbeelden
Laten we enkele realtime voorbeelden bespreken die een systeembeheerder of IT-professional gewoonlijk gebruikt.
Lege bestanden en mappen verwijderen
45 0 * * geekflare find /tmp -type f -empty -delete
Bovenstaande cron-expressie vindt de lege bestanden en mappen in de map /tmp en verwijdert ze. Deze taak wordt dagelijks om 12.45 uur uitgevoerd. We moeten de gebruikersnaam opgeven om deze taak uit te voeren. In het bovenstaande voorbeeld voert de geekflare-gebruiker de crontaak uit.
Meerdere taken uitvoeren met een enkele cron
* * * * /home/scripts/backup.sh; /home/scripts/scritp.sh
Meerdere taken/jobs kunnen worden gescheiden met een puntkomma(;) en kunnen worden toegewezen aan een enkele cron-expressie.
Cron opmaak & testtools
Tot nu toe hebben we de commando’s en syntaxis van crontab besproken om een taak in te plannen. Maar wat als u geen systeembeheerder bent en het niet uw taak is om regelmatig Cron in te stellen, dan is het misschien niet mogelijk om de syntaxis te onthouden en is er ruimte voor fouten. Geen zorgen, wij hebben een oplossing voor dit probleem.
Er zijn verschillende Cron-opmaakprogramma’s online beschikbaar.
# 1. Cron Job Generator
Cron Job Generator is een zeer gebruiksvriendelijke GUI waar u de minuten, dagen en het pad van het script kunt opgeven om crontab te genereren.
Laten we een real-time voorbeeld nemen waarbij ik /home/processMonitor.sh
elke 5 minuten moet uitvoeren tussen maandag en vrijdag.

Dus ik heb de onderstaande Cron-syntaxis die ik in mijn crontab kan zetten door het volgende uit te voeren
crontab -e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
# 2. Crontab Generator
Crontab Generator is een ander handig hulpprogramma om crontab te genereren en met dit hulpprogramma kunt u ook toevoegen of u de cronuitvoer in een bestand wilt opslaan of per e-mail wilt verzenden.

# 3. Crontab Guru
Crontab Guru is een eenvoudige online cron schema expressie editor. Daarnaast biedt het een handige manier om uw cronjob te controleren. Het enige wat we hoeven te doen, is een gegeven commando kopiëren en aan het einde van de crontab-definitie toevoegen. Als de cronjob mislukt of zelfs niet start, ontvangt u een waarschuwingsmail.
In het onderstaande voorbeeld wordt de taak elke dag, elke maand en elke week om 04:05 uitgevoerd.

# 4. CRON Tester
MetCRON Tester kunnen we de tijd-/datumdefinities van de cron testen. Er kan zich een situatie voordoen waarin we de bestaande cron syntax moeten decoderen om problemen op te lossen of gewoon een test willen doen.
Daarvoor kunnen we dit hulpmiddel gebruiken. Het enige wat we hoeven te doen, is onze cron-expressie kopiëren en plakken in het cron-definitieveld, vervolgens het aantal iteraties kiezen en op Test klikken om de verschillende data te zien waarop deze zal worden uitgevoerd.
Laten we een van onze cron-expressies 4 3 */2 *
controleren , die
om 03:04(AM) op elke twee dagen zou moeten draaien. Laten we het controleren met cron tester.

Conclusie
Ik hoop dat het bovenstaande u helpt om Crontab en het instellen van cron-taken beter te begrijpen. Het plannen van taken via Cron is een van de vele taken die door Linux Admin worden uitgevoerd. Als u geïnteresseerd bent in het leren van geavanceerde vaardigheden, bekijk dan deze cursus.