Android

Cron-taken plannen met crontab

Терминал Linux #7.1 - crontab: запуск задач по расписанию

Терминал Linux #7.1 - crontab: запуск задач по расписанию

Inhoudsopgave:

Anonim

Cron is een planningsdaemon die taken uitvoert met gespecificeerde intervallen. Deze taken worden cron-taken genoemd en worden meestal gebruikt om systeemonderhoud of -beheer te automatiseren.

U kunt bijvoorbeeld een cron-taak instellen om repetitieve taken te automatiseren, zoals een back-up van databases of gegevens maken, het systeem bijwerken met de nieuwste beveiligingspatches, het schijfgebruik controleren, e-mails verzenden, enzovoort. Sommige toepassingen, zoals Drupal of Magento, vereisen cron-taken om bepaalde taken uit te voeren.

De cron-taken kunnen worden gepland voor een minuut, uur, dag van de maand, maand, dag van de week of een combinatie hiervan.

Wat is Crontab-bestand

Crontab (cron-tabel) is een tekstbestand dat het schema van cron-taken specificeert. Er zijn twee soorten crontab-bestanden. De systeembrede crontab-bestanden en individuele gebruikers crontab-bestanden.

Crontab-bestanden van gebruikers worden opgeslagen onder de naam van de gebruiker en hun locatie varieert per besturingssysteem. In een op Red Hat gebaseerd systeem zoals CentOS worden crontab-bestanden opgeslagen in de map /var/spool/cron terwijl Debian- en Ubuntu-bestanden worden opgeslagen in de map /var/spool/cron/crontabs .

Hoewel u de gebruiker crontab-bestanden handmatig kunt bewerken, wordt het aanbevolen om de opdracht crontab gebruiken.

/etc/crontab en de bestanden in de map /etc/cron.d zijn systeembrede crontab-bestanden die alleen door de systeembeheerders kunnen worden bewerkt.

In de meeste Linux-distributies kun je ook scripts in de /etc/cron.{hourly, daily, weekly, monthly} mappen plaatsen en de scripts worden elk hour/day/week/month .

Crontab-syntaxis en operators

Elke regel in het crontab-bestand van de gebruiker bevat zes velden gescheiden door een spatie gevolgd door de opdracht die moet worden uitgevoerd.

* * * * * command(s) - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)

De eerste vijf velden kunnen een of meer waarden bevatten, gescheiden door een komma of een reeks waarden gescheiden door een koppelteken.

  • * -De asterisk-operator betekent elke waarde of altijd. Als u het asterisk-symbool in het veld Uur hebt, betekent dit dat de taak elk uur wordt uitgevoerd. , - Met de komma-operator kunt u een lijst met waarden voor herhaling opgeven. Als u bijvoorbeeld 1, 3, 5 in het veld Uur hebt, wordt de taak om 1 uur, 3 uur en 5 uur uitgevoerd. - operator voor koppeltekens kunt u een reeks waarden opgeven. Als u 1-5 in het veld Dag van de week, wordt de taak elke weekdag uitgevoerd (van maandag tot vrijdag). / -De slash-operator stelt u in staat om waarden op te geven die over een bepaald interval tussen hen worden herhaald. Als u bijvoorbeeld */4 in het veld Hour heeft, betekent dit dat de actie om de vier uur wordt uitgevoerd. Het is hetzelfde als het opgeven van 0, 4, 8, 12, 16, 20 . In plaats van een sterretje vóór de slash-operator, kunt u ook een reeks waarden gebruiken, 1-30/10 betekent hetzelfde als 1, 11, 21 .

Crontab-bestanden voor het hele systeem

De syntaxis van crontab-bestanden voor het hele systeem is iets anders dan crontabs voor gebruikers. Het bevat een extra verplicht gebruikersveld dat aangeeft welke gebruiker de cron-taak uitvoert.

* * * * * command(s) * * * * * command(s)

Voorgedefinieerde macro's

Er zijn verschillende speciale Cron-schemamacro's gebruikt om algemene intervallen op te geven. U kunt deze snelkoppelingen gebruiken in plaats van de datumspecificatie met vijf kolommen.

  • @yearly (of @annually ) - Voer de opgegeven taak eenmaal per jaar uit om middernacht (12.00 uur) op 1 januari. Gelijk aan 0 0 1 1 * . @monthly - Voer de opgegeven taak eenmaal per maand om middernacht op de eerste dag van de maand uit. Gelijk aan 0 0 1 * * . @weekly - Voer de opgegeven taak eenmaal per week om middernacht op zondag uit. Gelijk aan 0 0 * * 0 . @daily - Voer de opgegeven taak eenmaal per dag om middernacht uit. Gelijk aan 0 0 * * * . @hourly - Voer de opgegeven taak eenmaal per uur uit aan het begin van het uur. Gelijk aan 0 * * * * . @reboot - Voer de opgegeven taak uit bij het opstarten van het systeem (opstarttijd).

Linux Crontab-commando

Met de opdracht crontab kunt u een crontab-bestand installeren of openen voor bewerking.

U kunt de opdracht crontab gebruiken om cron-taken te bekijken, toe te voegen, te verwijderen of te wijzigen met behulp van de volgende opties:

  • crontab -e - Bewerk het crontab-bestand of maak er een als het nog niet bestaat. crontab -l - Geef de inhoud van het crontab-bestand weer. crontab -r - Verwijder uw huidige crontab-bestand. crontab -i - Verwijder uw huidige crontab-bestand met een prompt voordat u het verwijdert. crontab -u - Bewerk ander gebruik crontab-bestand. Vereist systeembeheerderrechten.

Met de opdracht crontab wordt het crontab-bestand geopend met de editor die is opgegeven door de omgevingsvariabelen VISUAL of EDITOR .

Crontab-variabelen

De cron-daemon stelt automatisch verschillende omgevingsvariabelen in.

  • Het standaardpad is ingesteld op PATH=/usr/bin:/bin . Als de opdracht die u aanroept aanwezig is in het door cron opgegeven pad, kunt u het absolute pad naar de opdracht gebruiken of de variabele cron $PATH . Je kunt niet impliciet toevoegen :$PATH zoals je zou doen met een regulier script. De standaardshell is ingesteld op /bin/sh . U kunt een andere shell instellen door de variabele SHELL wijzigen. SHELL roept de opdracht op vanuit de thuismap van de gebruiker. De variabele HOME kan worden overschreven door instellingen in de crontab. De e-mailmelding wordt naar de eigenaar van de crontab verzonden. Om het standaardgedrag te overschrijven, kunt u de MAILTO omgevingsvariabele gebruiken met een lijst (gescheiden door komma's) van alle e-mailadressen die u de e-mailmeldingen wilt ontvangen. Als MAILTO is gedefinieerd maar leeg is ( MAILTO="" ), wordt er geen e-mail verzonden.

Crontab Beperkingen

Systeembeheerders kunnen bepalen welke gebruikers toegang hebben tot de opdracht crontab door de bestanden /etc/cron.deny en /etc/cron.allow gebruiken. De bestanden bestaan ​​uit een lijst met gebruikersnamen, één gebruikersnaam per regel.

Standaard bestaat alleen het bestand /etc/cron.deny en is dit leeg, wat betekent dat alle gebruikers de opdracht crontab kunnen gebruiken. Als u de toegang tot de crontab-opdrachten voor een specifieke gebruiker wilt weigeren, voegt u de gebruikersnaam toe aan dit bestand.

Als het bestand /etc/cron.allow bestaat, kunnen alleen de gebruikers die in dit bestand worden vermeld de opdracht crontab gebruiken.

Als geen van beide bestanden bestaat, kunnen alleen gebruikers met beheerdersrechten de opdracht crontab gebruiken.

Cron Jobs Voorbeelden

Hieronder staan ​​enkele voorbeelden van cron-taken die u laten zien hoe u een taak kunt plannen om op verschillende perioden te worden uitgevoerd.

  • Voer elke dag van maandag tot en met vrijdag om 15:00 uur een opdracht uit:

    0 15 * * 1-5 command

    Voer elke 5 minuten een script uit en stuurde de standaarduitvoer om naar dev null , alleen de standaardfout wordt naar het opgegeven e-mailadres verzonden:

    [email protected] */5 * * * * /path/to/script.sh > /dev/null

    Voer elke maandag om 15.00 uur twee opdrachten uit (gebruik de operator && tussen de opdrachten door):

    0 15 * * Mon command1 && command2

    Voer elke 2 minuten een PHP-script uit en schrijf de uitvoer naar een bestand:

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log

    Voer elke dag, elk uur, op het uur, van 08.00 tot 16.00 uur een script uit:

    00 08-16 * * * /path/to/script.sh

    Voer een script uit op de eerste maandag van elke maand om 07.00 uur

    0 7 1-7 * 1 /path/to/script.sh

    Voer het a-script uit om 21.15 uur, op de 1e en 15e van elke maand:

    15 9 1, 15 * * /path/to/script.sh

    Stel aangepaste variabelen HOME , PATH , SHELL en MAILTO en voer elke minuut een opdracht uit.

    HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * command

Conclusie

U hebt geleerd hoe u cron-taken kunt maken en taken kunt plannen op een specifieke datum en tijd.

Als je nog vragen hebt, kun je een reactie achterlaten.

cron crontab-terminal