Cron & crontab, uitgelegd

Lucas hij publiceerde een tijdje geleden uitstekende tutorial over cron en crontab waarvan ik denk dat het de moeite waard is om te delen. Cron is een soort equivalent van geplande taken in Windows, alleen dat het wordt afgehandeld vanaf de terminal. Wie de voorkeur geeft aan een visuele interface om hetzelfde doel te bereiken, kan dit zien een ander item.

Wat is cron?

De naam cron komt van het Griekse chronos wat "tijd" betekent. In het Unix-besturingssysteem is cron een reguliere procesmanager op de achtergrond (daemon) die processen of scripts met regelmatige tussenpozen uitvoert (bijvoorbeeld elke minuut, dag, week of maand). De processen die moeten worden uitgevoerd en het tijdstip waarop ze moeten worden uitgevoerd, worden gespecificeerd in het crontab-bestand.

Cómo werken

De cron-daemon begint vanaf /etc/rc.d/ o / Etc / init.d afhankelijk van de distributie. Cron wordt op de achtergrond uitgevoerd, controleert de crontab-taaktabel elke minuut / Etc / crontab of / var / spool / cron op zoek naar taken die moeten worden uitgevoerd. Als gebruiker kunnen we commando's of scripts met taken aan cron toevoegen om sommige processen te automatiseren. Dit is bijvoorbeeld handig om de update van een systeem of een goed back-upsysteem te automatiseren.

Gerelateerd artikel:
Tutorial: Installeer .tar.gz en .tar.bz2 pakketten

Wat is Crontab?

Crontab is een eenvoudig tekstbestand dat een lijst met opdrachten opslaat die moeten worden uitgevoerd op een door de gebruiker opgegeven tijdstip. Crontab controleert de datum en tijd waarop het script of commando moet worden uitgevoerd, de uitvoeringsrechten en het zal dit op de achtergrond doen. Elke gebruiker kan zijn eigen crontab-bestand hebben, in feite het / Etc / crontab Aangenomen wordt dat het het crontab-bestand van de rootgebruiker is, als normale gebruikers (en zelfs root) hun eigen crontab-bestand willen genereren, zullen we het crontab-commando gebruiken.

Crontab is de gemakkelijkste manier om cron-taken te beheren op systemen met meerdere gebruikers, hetzij als een eenvoudige systeemgebruiker of als rootgebruiker.

Crontab gebruiken

We beginnen met een eenvoudig voorbeeld.

We gaan de update van een systeem automatiseren, om het vervelende "Ik moet altijd updaten en dat vind ik niet leuk!"

hoe te
Gerelateerd artikel:
Bevelen om het systeem te kennen (identificeer hardware en sommige softwareconfiguraties)

Allereerst maken we een script. Dit script wordt aangeroepen door cron en zal alle instructies bevatten die we willen dat het doet, daarom is het nodig om het in verschillende gevallen en op verschillende manieren te testen voordat je het in cron opneemt, een eenvoudig updatescript zoals dit:

#! / bin / bash # script update voorbeeld # kies uw distributie # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Verwijder de # uit je distro-lijn. In het geval dat het Ubuntu / Debian is, begint het met apt-get.

We slaan het script op als update.sh (bijv. Scripts in de directory van uw huis). We wijzigen de uitvoeringsrechten van het genoemde script met:

chmod a + x ~ / scripts / update.sh

We draaien het script een paar keer om te controleren of alles soepel verloopt, we passen aan wat nodig is (het mag geen fouten bevatten, anders herhaalt cron een fout alleen maar keer op keer). Nu om de taak toe te voegen aan onze crontab.

Voeg taken toe aan crontab

We voeren de editie van de crontab uit met crontab -e, in sommige distributies (zoals Ubuntu) geeft het ons de mogelijkheid om de gewenste teksteditor te kiezen, de rest houden we over met vi. Het crontab-bestand ziet er ongeveer zo uit.

# mh dom mon dow gebruikerscommando

waar:

  • m komt overeen met de minuut dat het script wordt uitgevoerd, de waarde varieert van 0 tot 59
  • h de exacte tijd, het 24-uurs formaat wordt afgehandeld, de waarden variëren van 0 tot 23, waarbij 0 middernacht is.
  • gift verwijst naar de dag van de maand, u kunt bijvoorbeeld 15 opgeven als u elke 15 dagen wilt hardlopen
  • dow betekent de dag van de week, deze kan numeriek zijn (0 tot 7, waarbij 0 en 7 zondag zijn) of de eerste 3 letters van de dag in het Engels: ma, di, wo, do, vrij, za, zo.
  • gebruiker definieert de gebruiker die het commando zal uitvoeren, het kan root zijn, of een andere gebruiker, zolang ze toestemming hebben om het script uit te voeren.
  • commando verwijst naar de opdracht of het absolute pad van het script dat moet worden uitgevoerd, bijvoorbeeld: /home/usuario/scripts/update.sh, als het een script aanroept, moet het uitvoerbaar zijn

Voor de duidelijkheid een paar voorbeelden van cron-taken uitgelegd:

15 10 * * * gebruiker /home/user/scripts/update.sh

Het update.sh-script wordt elke dag om 10:15 uur uitgevoerd

15 22 * * * gebruiker /home/user/scripts/update.sh

Het update.sh-script wordt elke dag om 10:15 uur uitgevoerd

00 10 * * 0 root apt-get -y update rootgebruiker

Elke zondag om 10 uur wordt er een update uitgevoerd

45 10 * * sun root apt-get -y-update

De rootgebruiker zal elke zondag (zo) om 10:45 uur een update uitvoeren

30 7 20 11 * gebruiker /home/usuario/scripts/update.sh

Op 20 november om 7 uur zal de gebruiker het script draaien

30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh

Op 11 november om 7 uur en dat is zondag, viert de gebruiker zijn sysadmin (dat wil zeggen, ik)

01 * * * * gebruiker /home/usuario/scripts/molestorecordatorio.sh

Elke minuut van elk uur elke dag een vervelende herinnering (NIET aanbevolen).

Ze kunnen nog steeds worden afgehandeld speciale reeksen:

30 17 * * 1,2,3,4,5

Elke dag om 5 uur van maandag tot en met vrijdag.

00 12 1,15,28 * *

Elke eerste, vijftiende en 12ste van elke maand om 28 uur 's middags (ideaal voor salarisadministratie)

Als dit verwarrend is, handelt crontab speciale strings om deze bereiken te definiëren.

@reboot Eén keer uitvoeren bij het opstarten
@yearly draait slechts één keer per jaar: 0 0 1 1 *
@annually hetzelfde als @yearly
@monthly wordt eenmaal per maand uitgevoerd, de eerste dag: 0 0 1 * *
@weekly Wekelijks de eerste minuut van het eerste uur van de week. 0 0 * * 0 ″.
@dagelijks dagelijks, om 12 uur. 00 0 * * *
@midnight hetzelfde als @daily
@hourly op de eerste minuut van elk uur: 0 * * * *

Het gebruik ervan is heel eenvoudig.

@hourly gebruiker /home/user/scripts/molestorecordatorio.sh @maandelijkse gebruiker /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Tenslotte:

Beheer van cron-taken

crontab-bestand

Vervang het bestaande crontab-bestand door een door de gebruiker gedefinieerd bestand

crontab -e

Bewerk het crontab-bestand van de gebruiker, elke nieuwe regel wordt een nieuwe crontab-taak.

crontab -l

Maak een lijst van alle crontab-taken van de gebruiker

crontab-d

Verwijder de crontab van de gebruiker

crontab -c richt

Definieert de crontab-map van de gebruiker (deze moet de schrijf- en uitvoeringsrechten van de gebruiker hebben)

crontab -u gebruiker

prefix om de crontab van een andere gebruiker af te handelen, voorbeelden:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u gebruiker

Deze tool kan, net als vele andere, dieper en in meer detail worden bekeken in:

Bedankt Lucain!