Crontab - Als u momenteel een server-zware website heeft, wilt u mogelijk bepaalde processen uitvoeren, zoals het verrijken van gegevens of het genereren van miniaturen op de achtergrond, zonder de gebruikersinterface te verstoren. Nou, Linux crontab heeft een goed programma dat precies dat doet: Cron.

Een inleiding tot Cron

Dus wat is dit programma? Cron is gecategoriseerd als een daemon die geplande opdrachten kan uitvoeren. Het wordt automatisch gestart bij het invoeren van runniveaus voor meerdere gebruikers, van /etc/init.d. Het doorzoekt het spoolgebied op / var / spool / cron / crontabs naar crontab-bestanden genoemd naar de accounts in / etc / passwd. Om toegang te krijgen tot de crontabs in deze map, moet u de opdracht crontab gebruiken in plaats van ze rechtstreeks te openen. Cron kan ook de iets andere indeling van / etc / crontab lezen, evenals bestanden in /etc/cron.d.

Eenmaal geconfigureerd, wordt Cron elke minuut wakker, onderzoekt het opgeslagen linux crontabs en controleert het commando om te zien of er iets moet worden uitgevoerd. Als een opdracht wordt uitgevoerd en uitvoer wordt gegenereerd, wordt de uitvoer vervolgens gemaild naar de eigenaar van de crontab of de gebruiker in de MAILTO-variabele in de crontab. De onderliggende exemplaren van de cron die deze processen uitvoert, worden in hoofdletters genoemd, wat u zult zien in de uitvoer van ps en syslog.

Cron controleert ook elke minuut op wijzigingen in de modtime van de spoolmap. Als er veranderingen zijn, onderzoekt het de modtime van alle linux crontabs en herlaadt degenen die zijn gewijzigd. Als gevolg hiervan hoeft cron niet opnieuw op te starten wanneer een crontab-bestand wordt gewijzigd.

Wanneer de klok drie uur of minder wordt gewijzigd, zijn er speciale overwegingen zoals aan het begin en einde van de zomertijd. Als de tijd vooruit gaat, worden de taken die in de overgeslagen tijd zijn uitgevoerd, gewijzigd om snel na de wijziging te worden uitgevoerd. Aan de andere kant, als de tijd achteruit gaat, worden de taken die in de herhaalde tijd vallen niet opnieuw uitgevoerd.

Alleen taken die op een specifiek tijdstip worden uitgevoerd in plaats van taken per uur of taken die zijn gemarkeerd met de '*' in de minuut / uur-specificatie worden beïnvloed. Taken die zijn opgegeven met wilde auto's worden onmiddellijk uitgevoerd op basis van de nieuwe tijd. In geval van klokveranderingen van meer dan drie uur, wordt de nieuwe tijd onmiddellijk gebruikt.

In Red hat en Debian behandelt cron de cron.d-bestanden als extensies voor het linux crontab-bestand, omdat ze het speciale formaat van het bestand volgen, wat betekent dat ze het gebruikersveld bevatten. Deze functie is bedoeld om pakketten toe te staan ​​die fijnere planningscontrole vereisen dan dagelijkse, maandelijkse of wekelijkse mappen. Dergelijke bestanden moeten idealiter worden vernoemd naar hun leverancierspakketten. Bestanden moeten voldoen aan de naamgevingsconventie die wordt gebruikt voor run-parts, in die zin dat ze uitsluitend moeten bestaan ​​uit hoofdletters en kleine letters, cijfers, koppeltekens en onderstrepingstekens. De bestanden in de map cron.d worden gecontroleerd op wijzigingen, net als de map linux crontab. Zorg ervoor dat u voor opdrachten zoals / bin / ls absolute padnamen gebruikt om de juiste opdracht aan te roepen.

Een inleiding tot Linux Crontab

Nu je de ins en outs van cron kent, laten we eens kijken naar linux crontab, een programma voor het installeren, verwijderen of vermelden van de tabellen om de daemon zelf te besturen. Elke gebruiker kan een eigen Linux crontab hebben en de bestanden zijn beschikbaar in de map crontabs, maar niet bedoeld voor directe bewerking.

Elke opdracht gegeven in een linux crontab van een gebruiker zal worden uitgevoerd als de eigenaar die het bezit. Tabs, voorloopspaties en lege regels worden meestal genegeerd. Lijnen met een hekje als het eerste niet-spatie-teken worden genegeerd omdat ze als opmerkingen worden behandeld. Het is vermeldenswaard dat opmerkingen niet zijn toegestaan ​​binnen dezelfde regels van cron-opdrachten als ze worden gelezen als onderdeel van de opdracht. Op dezelfde manier zijn opmerkingen ook niet toegestaan ​​op regels met omgevingsvariabele-instellingen.

In een linux crontab, een actieve regel met een cron-commando of omgevingsvariabele-instelling, in de vorm "naam = waarde", waar spaties kunnen worden toegevoegd indien nodig rond het gelijk-aan-teken. Alle volgende niet-voorloopspaties maken deel uit van de naamwaarde. De waardetekenreeks kan tussen enkele of dubbele overeenkomende aanhalingstekens worden geplaatst om achterblijvende of voorloopspaties te behouden. Het is niet geparseerd voor omgevingsvervangingen, dus het kan zijn dat regels als "PATH = $ HOME / bin: $ PATH" niet werken zoals verwacht.

Veel omgevingsinstellingen worden automatisch ingesteld door cron, zoals HOME en LOGNAME worden ingesteld vanaf de passwd-regel van de gebruiker en SHELL worden ingesteld op / bin / sh en PATH worden ingesteld op / usr / bin: / bin. Je kunt PATH, SHELL en HOME vervangen door crontab-instellingen. LOGNAME kan echter niet worden gewijzigd, omdat dit de gebruiker is van wie de taak wordt uitgevoerd. Op BSD-systemen kan deze variabele USER worden genoemd, in welk geval USER ook wordt ingesteld.

Als het verzenden van e-mails deel uitmaakt van de opdrachten die worden uitgevoerd in de linux crontab, zal cron ook kijken naar MAILTO. Als de variabele is gedefinieerd en niet leeg is, wordt een e-mail verzonden naar de genoemde gebruiker. Maar als het leeg is, wordt er geen e-mail verzonden en in plaats daarvan wordt een e-mail verzonden naar de linux crontab-eigenaar. Als het bestand cron.allow beschikbaar is, moet u hierin worden vermeld om deze opdracht te kunnen gebruiken. Als dit bestand niet bestaat maar er bestaat een cron.deny-bestand, dan moet u uit dat bestand worden verwijderd om de opdracht te gebruiken. Als geen van beide bestanden bestaat, kan alleen de supergebruiker de opdracht gebruiken, afhankelijk van de siteafhankelijke parameters. Als alternatief kunnen alle gebruikers de opdracht gebruiken, wat het geval is voor standaard Debian-systemen.

Als de optie –u beschikbaar is, geeft dit de gebruikersnaam waarvan de linux crontab moet worden aangepast. Indien niet gegeven, onderzoekt crontab de crontab van de gebruiker die de opdracht uitvoert. Het is belangrijk om deze optie altijd te gebruiken voor de veiligheid bij het uitvoeren van su, omdat Linux crontab door su kan worden verward. De optie -l is beschikbaar voor weergave van de huidige crontab op de standaarduitvoer, terwijl de optie -r de huidige crontab verwijdert. De opdracht -e wordt gebruikt voor het bewerken van de huidige linux crontab met behulp van editors die zijn opgegeven door de EDITOR of VISUAL omgevingsvariabelen. U kunt geen editor gebruiken die het bestand ontkoppelt en opnieuw maakt; u hebt een editor nodig die het bestand op zijn plaats bewerkt. Nadat de editor is afgesloten, wordt de getweakde linux crontab automatisch geïnstalleerd.

De pam_env-module wordt ook ondersteund door cron op het Debian GNU / Linux-systeem, waarbij de omgeving wordt geladen zoals gespecificeerd in het modulebestand. Er moet echter worden opgemerkt dat de PAM-instelling de bovengenoemde instellingen of de crontab-bestandsinstellingen niet overschrijft. Als u een ander PATH wilt dan de locatie van de opslaglocatie, moet u dit instellen in het crontab-bestand. Cron verzendt standaard e-mails met het contenttype 'text / plain' met de tekensetparameter ingesteld naar de codeset / character map van de landinstelling waar de cron is opgestart, wat de standaardlandinstelling van het systeem is zonder enige omgevingsvariabele ingesteld, of de landinstelling die de variabelen hebben ingesteld. U kunt uw eigen karaktercoderingen toevoegen voor de e-mailuitvoer door de variabelen 'Content_Transfer_Encoding' en 'Content_Type' in de crontabs in te stellen zodat deze overeenkomen met de e-mailkoppen van de namen.

Aanbevolen cursussen

  • Online cursus R Studio Anova technieken
  • Certificatietraining in AngularJS
  • ISTQB niveau 1 certificatiecursus
  • Certificatietraining in fundamentals voor het testen van software

Werken aan Crontab

De opdracht crontab, te vinden in Unix-achtige en Unix-besturingssystemen, is toegankelijk via een terminal. Om te zien welke crontab momenteel wordt uitgevoerd, opent u een terminal op uw systeem en voert u de volgende opdracht uit:

$ sudo crontab -l

Om de crontab-takenlijsten te bewerken, kunt u de volgende opdracht gebruiken:

$ sudo crontab -e

Met deze opdracht wordt de standaardeditor in uw systeem, mogelijk pico of vio, geopend om de crontab te wijzigen. Als u de crontab-taak in uw crontab-bestand wilt opslaan, slaat u de editor op en sluit u deze. Crontab-taken of cronjobs kunnen als volgt worden geschreven:

* * * * * /bin/execute/this/script.sh

Het bovenstaande commando bevat vijf sterretjes, die elk verschillende datumonderdelen vertegenwoordigen om de taak te plannen. Daar zijn ze:

  1. Minuut, variërend van nul tot 59
  2. Uur, variërend van nul tot 23
  3. Dag van de maand, variërend van één tot 31
  4. Maand, variërend van één tot 12
  5. Dag van de week, van nul tot zes, waarbij nul zondag betekent

De bovenstaande lijst is in volgorde gegeven, dus u moet eerst de minuut definiëren, gevolgd door uur, dag van de maand, maand en dag van de week. U kunt het sterretje behouden als u geen velden wilt definiëren, maar het is belangrijk op te merken dat het symbool 'elke' betekent. Als u alle vijf velden ongedefinieerd laat met de sterretjes intact, betekent dit elke minuut van elk uur, in elke dag van elke week en elke maand.

Laten we aannemen dat u gewoon een script elke middag op een zondag wilt uitvoeren, dit is wat u doet:

0 12 * * 0 /bin/execute/this/script.sh

Nu wordt het script uitgevoerd wanneer de systeemklok elke zondag 1200 uur, elke week van elke maand raakt. Nu, als u het script elke werkdag om 12.00 uur wilt uitvoeren, hier is wat u schrijft:

0 12 * * 1-5 /bin/execute/this/script.sh

De cron voert opdrachten uit wanneer de velden jaar, maand, uur en minuut overeenkomen met de huidige tijd, of wanneer ten minste de dag van de maand en het jaar overeenkomen met de huidige tijd. Een veld kan worden gemarkeerd met een asterisk om 'first-last' aan te geven. Getalbereiken zijn toegestaan, waarbij het bereik twee getallen is die worden gescheiden door een koppelteken. Het specifieke bereik is inclusief, dus een bereik van 8-11 voor 'uren' geeft uitvoering op de achtste, negende, tiende en elfde uur aan. Lijsten worden ook ondersteund, waarbij elk nummer wordt gescheiden door komma's, zoals '1, 2, 8, 9'. Je kunt ook mixen en matchen, dus het kan '1, 2, 8-11' zijn.

U kunt stapwaarden gebruiken in combinatie met de bereiken, met de '/' achter een bereik dat een overslaan van de waarde van het nummer door het bereik aangeeft. Bijvoorbeeld, '0-11 / 2' in het veld uren geeft opdrachtuitvoering om het andere uur aan, dat als een dergelijke lijst zou worden geschreven: '0, 2, 4, 6, 8, 10'. Stappen kunnen worden toegestaan ​​na een asterisk, zoals '* / 2' om een ​​opdracht aan te geven die om de twee uur moet worden uitgevoerd. Voor de dag- en maandvelden kunt u de eerste drie letters van die bepaalde dag of maand gebruiken, en het maakt niet uit. Lijsten en reeksen namen worden echter niet ondersteund. De dag van uitvoering kan in twee velden worden gespecificeerd: dag van de week en dag van de maand. Als beide velden beperkt zijn, wordt de opdracht uitgevoerd wanneer een van beide velden overeenkomt.

De rest van de regel is het 'zesde' veld, dat het uit te voeren commando aangeeft. Het opdrachtgedeelte van de regel duurt maximaal een nieuwe regel of maximaal% teken. Het wordt uitgevoerd door de sh of door de opgegeven shell in de SHELL-variabele van het crontab-bestand. Het% in de opdracht wordt gewijzigd in newline-tekens, tenzij deze worden overgeslagen met de backslash '\'. Alle gegevens na het eerste% -teken worden als standaardinvoer naar de opdracht verzonden. U kunt een opdrachtregel niet in meerdere regels splitsen.

Tricks plannen op Crontab

Het formatteren kan even wennen zijn, maar hier zijn enkele trucs om je te helpen. Als je elke tien minuten een cronjob wilt uitvoeren, kun je het op deze manier schrijven:

0, 10, 20, 30, 40, 50 * * * * /bin/execute/this/script.sh

Of je kunt het op deze manier schrijven, wat eenvoudiger is:

* / 10 * * * * /bin/execute/this/script.sh

Je hebt ook speciale woorden die je voor het eerste minuutveld kunt toevoegen in plaats van een getal, zoals:

  • @reboot: dit zou het script eenmaal uitvoeren bij het opstarten van het systeem
  • @jaarlijks: om de opdracht eenmaal per jaar uit te voeren (het alternatieve formaat zou "0 0 1 1 *" zijn)
  • @annually: een alternatief voor het jaarlijkse trefwoord
  • @maandelijks: om de opdracht eenmaal per maand uit te voeren ("0 0 1 * *")
  • @weekly: eenmaal per week uitvoeren ("0 0 * * 0")
  • @daily: eenmaal per week uitvoeren ("0 0 * * *")
  • @midnight: een alternatief voor het dagelijkse trefwoord
  • @uurlijk: elk uur draaien ("0 * * * *")

Uitgang opslag

Standaard slaat de cron de uitvoer van de taak op in de gebruikerspostbus of root. Maar u kunt de uitvoer eenvoudiger en presentabeler maken door deze op te slaan in een afzonderlijk logbestand. Dit is hoe je het doet:

* / 10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2> & 1

Linux kan op verschillende niveaus rapporteren. U hebt standaardfouten STDERR en standaarduitvoer STDOUT, gemarkeerd als respectievelijk 2 en 1. De volgende instructie vertelt om de STDERR en STDOUT beide op te slaan, om een ​​enkele datastroom van berichten en fouten te maken:

2> & 1

Dus we hebben de outputstroom gedefinieerd, we moeten deze nu een bestemming geven. De '>' overschrijft het bestand en '>>' wordt eraan toegevoegd. Voor toevoegen, wat altijd veiliger is, kunt u de volgende opdracht gebruiken:

>> /var/log/script_output.log

Conclusie

Zoals u kunt zien, kunt u met cron taken instellen om automatisch met regelmatige tussenpozen op de achtergrond te worden uitgevoerd. Hiermee kunt u automatisch back-ups maken, updates plannen, bestanden synchroniseren en nog veel meer. U kunt dat alles en meer doen met crontab.

Aanbevolen artikelen: -

Hier zijn enkele artikelen die je zullen helpen om meer details over de Linux Crontab te krijgen, dus ga gewoon door de link.

  1. Vragen en antwoorden over sollicitatiegesprekken bij Linux | Handig en meest gevraagd
  2. Carrières in Linux
  3. Top 10 nuttige Linux-apps voor systeembeheerders
  4. Linux versus Windows 10