Rulați un job Cron în fiecare minut

Run Cron Job Every Minute



Dacă doriți să rulați un program sau un script în fundal pe Linux, atunci lucrarea cron este foarte importantă. Cu ajutorul lucrărilor cron, puteți executa un program sau un script în fundal după un anumit interval de timp.

Să aruncăm o privire la câteva exemple din viața reală de joburi cron.







  • Să presupunem că dețineți un site web și doriți să trimiteți tuturor utilizatorilor site-ului dvs. un e-mail în fiecare zi. Tot ce trebuie să faceți este să scrieți un script de trimitere prin e-mail și să configurați un job cron pentru a rula acel script în fiecare zi.
  • Să presupunem că dețineți o agenție de publicitate și doriți să le reamintiți tuturor agenților de publicitate al căror sold este sub 5 USD să se reîncarce. Tot ce trebuie să faceți este să scrieți un script care verifică soldul tuturor agenților de publicitate și, atunci când este sub 5 $, va trimite o notificare la numărul de telefon sau la adresa de e-mail a agentului de publicitate. Apoi configurați o lucrare cron pentru a rula scriptul la fiecare 5-10 minute sau la fiecare oră.

Există multe alte utilizări ale joburilor cron în Linux.



În acest articol, vă voi arăta cum să rulați lucrări cron în fiecare minut pe Linux. Voi folosi Debian 9 Stretch pentru demonstrație. Dar puteți utiliza orice distribuție Linux modernă la alegere. Să începem.



Pe Linux, nu trebuie să fii rădăcină pentru a rula joburi cron. Puteți rula lucrări cron ca orice utilizator. Fiecare utilizator de pe Linux poate folosi un crontab fișier pentru a rula propriul set de lucrări cron.





În mod implicit, un utilizator nu are un crontab fișier pe Linux. Puteți crea un crontab fișier cu următoarea comandă:

$crontab-Și



Dacă executați această comandă pentru prima dată, atunci ar trebui să vi se solicite să alegeți un editor de text din listă. Voi alege nano , cel implicit. Puteți alege pe cel care vă place. După ce ați terminat, apăsați .

The crontab fișierul trebuie creat (dacă nu este deja disponibil) și deschis cu editorul de text preferat. Acum puteți adăuga propriile joburi cron la sfârșitul acestui fișier și odată ce vă bucurați, salvați-l și ieșiți din editorul de text.

Sintaxa executării unei comenzi în fiecare minut:

Sintaxa lui crontab fișierul este după cum urmează:

minut oră ziOfMonth lună dayOfWeek comandăToRun

Aici,

  • minut poate fi 0 la 59 .
  • ora poate fi și 0 la 59 .
  • dayOfMonth poate fi 1 la 31 .
  • lună poate fi 1 la 12 .
  • zi a săptămânii poate fi 0 la 7 . 0 și 7 înseamnă duminică, 1 înseamnă luni, 2 înseamnă marți și așa mai departe.

Pentru a rula un commandToRun comandă în fiecare minut, ar trebui să o scrieți în crontab înregistrați după cum urmează:

* * * * *commandToRun

Rularea unui job Crob în fiecare minut:

Acum, că știm teoriile, să adăugăm un script simplu cronometru.sh la crontab fișier și vedeți cum să îl gestionați.

În cronometru.sh script, am doar următoarele rânduri de coduri. Tot ce face este să creeze un fișier nou /home/shovon/bin/timer.log (dacă nu există deja) și îi adaugă ieșirea comenzii date.

Acum să adăugăm scenariul nostru crontab și lăsați-l să ruleze în fiecare minut cu următoarea linie:

* * * * * /Acasă/shovon/a.m/cronometru.sh

Odată ce salvați fișierul crontab fișier și ieșiți din editorul de text, noul crontab fișierul ar trebui să fie instalat.

După ce a trecut un minut, apare un nou fișier timer.log este creat în directorul dorit așa cum puteți vedea în secțiunea marcată a capturii de ecran de mai jos.

De la timer.log fișier jurnal, este evident că scriptul cronometru.sh rulează în fiecare minut.

Preluarea erorilor din joburile Cron:

Pentru a prinde erori dintr-un job cron, puteți trimite erorile către un eroare.log fișier și ieșiri normale la access.log fișier de exemplu. Desigur, puteți denumi fișierele orice doriți.

Pentru a demonstra acest lucru, mi-am modificat scenariul cronometru.sh putin. Acum, erorile sunt trimise către eroare.log fișier în / home / shovon / bin directorul și ieșirile sunt trimise către access.log în / home / shovon / bin director.

La început / tmp / trebuie să fiu_aici fișierul nu există, așa că primesc eroarea în eroare.log fișier așa cum puteți vedea.

The access.log fișierul este gol în acest moment.

Acum voi crea fișierul / tmp / trebuie să fiu_aici

Și, după cum puteți vedea, rezultatul este în access.log înregistrați acum.

Dacă doriți, puteți redirecționa ieșirea și erorile din același fișier după cum urmează:

După cum puteți vedea, ieșirile STDIN și STDERR sunt trimise către out.log fişier.

Asigurarea finalizării ultimului job înainte de a rula din nou jobul:

Pentru ca acest lucru să funcționeze, puteți crea un fișier temporar imediat după începerea lucrării și îl puteți elimina chiar înainte de a se termina. Apoi, puteți verifica dacă fișierul temporar există înainte de a începe lucrarea. Dacă da, puteți ieși din job și rula jobul numai atunci când fișierul temporar nu este disponibil.

Acest script simplu face exact asta.

După cum puteți vedea, cronometru.pid fișierul este creat.

Citind access.log fișierul demonstrează că jobul cron nu rulează înainte ca jobul cron anterior să se termine. După cum puteți vedea, a rulat la 01:32:01 și data viitoare ar fi trebuit să ruleze la 01:33:01, dar nu a funcționat. În schimb, a rulat la 01:35:01, aproximativ 3 minute mai târziu.

Organizarea rezultatelor jobului Cron pentru depanare ușoară:

Puteți formata rezultatele frumos pentru a vă facilita depanarea lucrării cron.

Un exemplu despre cum se poate face este dat în scriptul următor.

După cum puteți vedea, rezultatele, erorile și mesajele de succes sunt tipărite frumos în fișierul jurnal.

Puteți face lucruri uimitoare cu joburi cron și scripturi shell. Am demonstrat câteva idei aici. Dar cerul este limita ta. Simțiți-vă liber să experimentați orice idee aveți. Vă mulțumim că ați citit acest articol.