Cum să programați sarcini în Linux cu Cron și Crontab

Cum să programați sarcini în Linux cu Cron și Crontab

Stiai asta Blade Runner este stabilit în 2019? Asta este peste trei ani! Ca să nu mai vorbim despre Înapoi la viitor 2 , unde călătoresc în timp până în 2015. Cu toate acestea, nu avem mașini zburătoare și nu există replicanți printre noi (din câte știu eu).





Este ușor să ne simțim dezamăgiți de tehnologia actuală atunci când o comparăm cu reprezentări fictive ale viitorului. Totuși, în zilele noastre telefoanele, computerele și chiar casele noastre pot face lucruri uimitoare. Capacitatea de a automatiza sarcinile este una dintre ele.





Fiecare utilizator Linux poate beneficia de sarcini de planificare, indiferent dacă este legat de sistem (cum ar fi curățarea jurnalelor vechi și actualizarea pachetelor ) sau servirea utilizatorului (verificarea e-mailului, descărcarea podcasturilor ...). Utilizatorii de Windows au Task Scheduler de la Windows 95. Utilitarul care face aceeași treabă pe Linux se numește cron și aici vom explica cum să-l folosim.





telecomanda hisense roku TV nu funcționează

Ce este Cron?

Cron este un serviciu de sistem care rulează în fundal, verifică sarcinile programate și le execută dacă găsește. Sarcinile - numite și „joburi cron” - sunt definite în fișiere de configurare speciale (crontabs), pe care cron le scanează în fiecare minut. Mai multe versiuni de cron pot fi găsite pe diferite distribuții Linux. De exemplu, furca de cron a Fedorei este numită amice , și există și fcron , bcron , și dcron . Unele au funcții suplimentare, în timp ce altele sunt mai axate pe securitate, dar toate se bazează pe aceeași idee.

Acest ghid este scris pentru vixie-cron, care este cea mai răspândită versiune de cron și cea pe care o veți găsi pe Ubuntu și derivatele sale. În timp ce majoritatea instrucțiunilor se aplică și altor implementări cron, pot exista diferențe minore, deci verificați manualele lor dacă decideți să comutați.



Ce este un Crontab?

Dacă sunteți serios în ceea ce privește gestionarea timpului, probabil că aveți un fel de calendar - o aplicație sau cel puțin o bucată de hârtie. Crontab seamănă foarte mult cu calendarul computerului. Păstrează informațiile despre sarcinile programate, spunându-i lui cron ce comenzi să ruleze la ce oră.

De fapt, mai multe crontabs sunt pe sistemul dvs. Fiecare utilizator are propriul crontab, inclusiv root (administratorul). Crontabs-ul utilizatorului este stocat în





/var/spool/cron/crontabs/

. The

crontab -l

comanda va lista fișierul crontab pentru utilizatorul curent. Puteți verifica rădăcina crontab cu





sudo crontab -l

.

În plus, există fișierul crontab al sistemului

/etc/crontab

care este utilizat pentru sarcini la nivel de sistem. De obicei, acestea iau forma unor scripturi executabile, deținute de rădăcină, plasate în

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, și

/etc/cron.monthly/

dosare, iar pe unele distribuții,

/etc/cron.d/

dosar, de asemenea. În general, nu ar trebui să vă ocupați de aceste sarcini, deoarece majoritatea sunt create automat de aplicațiile instalate.

Cum să programați sarcini cu Cron

Sună simplu: pentru a programa sarcini, trebuie doar să le adăugați în crontab. Deoarece crontab este un fișier de configurare special, nu este recomandat să îl editați manual. În schimb, utilizați

crontab -e

comanda. Pentru a edita contururile root sau ale altor utilizatori, executați comanda cu privilegii administrative și adăugați numele de utilizator după opțiunea -u:

sudo crontab -u root -e
sudo crontab -u username -e

Fișierul crontab are două secțiuni. Prima conține variabile de mediu care sunt configurate automat. Puteți modifica în siguranță variabilele PATH, HOME și SHELL și puteți modifica variabila MAIL.

A doua parte a fișierului este „calendarul” real cu sarcinile planificate. Fiecare activitate ocupă o linie (rând) în tabel, cu coloane reprezentând următoarele valori:

Pentru a programa cu succes sarcini, trebuie să știți puțin despre sintaxa crontab:

  • Numerele ar trebui să fie numere întregi (numere întregi) și puteți utiliza asteriscul (*) în oricare dintre coloane ca un wildcard, adică „fiecare minut / zi / lună ...”.
  • În coloana „Ziua lunii”, aveți grijă să nu setați o dată care nu apare în luna specificată în coloana „Luna” (de exemplu, 30 februarie).
  • Atât coloanele „Lună”, cât și „Ziua săptămânii” acceptă denumiri scurte pentru luni și, respectiv, pentru zile și nu sunt sensibile la majuscule.
  • În coloana „Ziua săptămânii”, atât 0, cât și 7 reprezintă duminica. Coloana „Ora” necesită formatul „ora militară” (24 de ore), dar nu puteți folosi numărul 24 - în schimb, 0 reprezintă 12 dimineața Acest lucru se datorează faptului că încep valorile pentru minut, oră și ziua săptămânii la 0 în loc de 1.
  • Secundele nu sunt acceptate, deci nu puteți programa o sarcină la o anumită secundă.

Ceea ce puteți face este să programați intervale de timp inclusiv folosind o cratimă (14-22 sub „Ore” va rula sarcina continuu între orele 14:00 și 22:00) sau rulați o singură sarcină de mai multe ori prin definirea unei liste separate prin virgulă (1, 3,5 sub „Ziua săptămânii” va rula sarcina luni, miercuri și vineri).

Între timp, valorile pasului sunt reprezentate printr-o bară slabă (/), iar acestea indică cantitatea de salturi într-un interval; de exemplu, 3-20 / 3 sub „Ore” va rula sarcina la fiecare trei ore de la 3 a.m. la 8 p.m. Acest lucru este util atunci când doriți să repetați sarcini la fiecare X ore, deoarece puteți combina un asterisc și un pas (* / X). Puteți combina intervale cu liste și pași cu intervale atâta timp cât utilizați numere. Cu alte cuvinte, nu sunt permise combinații precum „ian-mar” sau „marți, vineri-duminică”.

Alternativ, în loc să setați o valoare pentru fiecare coloană, puteți scrie doar @weekly, @yearly, @monthly, @daily sau @hourly la începutul unui rând, urmată de o comandă. Programate astfel, sarcinile vor rula în prima instanță posibilă, astfel încât @weekly ar rula la miezul nopții în prima zi a săptămânii. Dacă doriți să rulați o sarcină imediat când sistemul (re) pornește, utilizați comanda @reboot.

În acest exemplu, am programat o copie de rezervă în fiecare zi la 08:20 și 20:20. Imaginea de fundal se schimbă automat la fiecare trei zile la ora 19:00, iar un script va verifica podcast-urile noi în fiecare luni, la 10:20 și 20:20. Un memento pentru ziua de naștere este setat pentru 25 martie și rulează la fiecare 30 de minute în intervalul de timp specificat. În cele din urmă, un script verifică e-mailul la fiecare 15 minute de la 8 la 20, dar numai în zilele lucrătoare. Sunteți liber să vă organizați crontabul cu spații și file între coloane, dar nu în interiorul acestora (nu puneți spații între virgule, cratime și bare).

Dacă toate acestea sună prea complicate, nu vă faceți griji - vă puteți baza oricând pe internet. Instrumente precum Generator Crontab , Crontab.guru și Corntab vă ajută să creați joburi cron fără să cunoașteți nici o sintaxă crontab. Acestea vă arată când lucrarea va rula în continuare și vă oferă șabloane pentru expresiile utilizate în mod obișnuit. Crontab.guru este cel mai bun din grup, deoarece vă permite să testați în direct sintaxa crontab, astfel încât să puteți vedea imediat cum modificările dvs. vor afecta programul.

Cum se verifică dacă joburile Cron sunt executate

Cron ar trebui să ruleze liniștit în fundal și să vă lase să lucrați netulburat în timp ce se ocupă de sarcinile dvs. Dar cum te poți asigura că funcționează efectiv?

Cron are o funcție de notificare prin e-mail încorporată, dar aceasta necesită configurarea a cel puțin unui simplu server de poștă locală. Nu mulți utilizatori de acasă sunt dispuși să configureze acest lucru și nu multe distribuții îl furnizează în mod implicit (de exemplu, Ubuntu nu). Cel mai rapid mod de a verifica cronul este scanarea jurnalului de sistem cu această comandă:

cat /var/log/syslog | grep -i cron

Opțiunea -i face că interogarea noastră nu face sensibilitate la majuscule. Este posibil ca cron să aibă propriul său fișier jurnal undeva în

/var/log/

, așa că uită-te acolo dacă această comandă nu reușește să producă rezultate utile.

Dacă trebuie să salvați rezultatul unui anumit job cron, îl puteți redirecționa către un fișier. Furnizați calea și numele fișierului în ultima coloană a crontab-ului dvs., după comanda pe care doriți să o rulați:

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

Utilizarea unui singur simbol> va suprascrie fișierul de fiecare dată când rula comanda. Pentru a evita acest lucru, utilizați >> în schimb - adaugă ieșirea la fișierul existent.

Ce se întâmplă dacă Cron nu funcționează?

S-ar putea întâmpla să fi adăugat unele sarcini, să fi verificat jurnalele de sistem și să fi constatat că nu execută așa cum ar trebui. Iată câteva lucruri pe care ar trebui să le luați în considerare - și să aveți grijă - atunci când încercați să remediați problema.

Serviciul cron rulează?

După cum știți, demonul cron ar trebui să ruleze în fundal. Asigurați-vă că acesta este cu adevărat cazul. Serviciul este fie numit crond, fie doar cron.

Pentru distribuții folosind systemd:

systemctl status cron

Pentru distribuții care utilizează Upstart:

service cron status

Dacă distribuția dvs. utilizează abordarea inițială „veche” System V, enumerați toate serviciile cu:

cum se face imagine în imagine pe YouTube
initctl list

și vezi dacă cron este listat.

Ai voie chiar să ai un fișier crontab?

Verifică-ți

/etc

folder pentru fișierele denumite

cron.allow

și

cron.deny

. Pe Ubuntu, nici unul nu ar trebui să existe, ceea ce înseamnă că toți utilizatorii au permisiunea de a gestiona joburile cron. Cu toate acestea, dacă există un

ce înseamnă accelerarea hardware atunci când este disponibilă?
cron.allow

fișier, trebuie să conțină numele dvs. de utilizator. În schimb, dacă

cron.deny

fișierul există, numele dvs. de utilizator nu ar trebui să fie în el. Părăsind

cron.deny

fișier gol înseamnă că numai rădăcina și utilizatorii enumerați în

cron.allow

poate avea fișiere crontab.

Variabilele dvs. sunt setate corect?

Crontab setează automat variabila SHELL la

/bin/sh

. Cu toate acestea, dacă coaja ta la alegere este peștele sau bash, ar trebui să schimbați variabila SHELL

. De asemenea, variabila PATH conține în mod implicit doar câteva directoare. Aici crontab caută comenzi Linux. Dacă jobul dvs. cron nu reușește să ruleze, s-ar putea să fie din cauză că crontab nu „vede” comanda pe care ați folosit-o. Pentru a evita acest lucru, adăugați directoare care conțin comenzile la variabila PATH, separate prin două puncte:

PATH = / opt / myapp / bin: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin

Dacă nu doriți să editați acest lucru în crontab, puteți defini aceste variabile în scriptul pe care doriți să îl rulați ca o lucrare cron.

Este formatarea dvs. crontab la punct?

Sintaxa Crontab nu este exact o navigație lină. Chiar dacă îl verificați cu instrumentele online menționate anterior, o greșeală minoră ar putea împiedica în continuare cron să vă execute joburile. Aveți grijă să:

  • adăugați o linie goală la sfârșitul fișierului crontab
  • scapă semnul% cu o bară inversă dacă comanda ta îl include
  • scrie comentarii ca linii separate începând cu #. Nu scrieți comentarii pe aceeași linie cu variabilele de mediu sau lângă comenzi de job cron.

Chiar trebuie să utilizați terminalul?

Absolut nu. Utilizatorii KDE pot programa lucrări cron cu KCron, care este accesibil din Setări sistem> Programator activități modul. Cu o interfață simplă care vă permite să alegeți și să modificați totul în doar câteva clicuri de mouse, KCron este o plăcere de utilizat.

Dacă preferați GNOME, atunci Program GNOME este pentru tine. Abordarea este similară, deși interfața este, probabil, ușor diferită. Oferă un mod avansat pentru modificări fine și vine cu un applet de panou din care puteți gestiona sarcinile direct.

Ar trebui să fiți conștienți de alte soluții, cum ar fi Crontab-UI și Minicron . Sunt mai potrivite pentru utilizatorii care gestionează mai multe mașini și joburi cron, iar una dintre cele mai interesante caracteristici este interfața bazată pe web.

Există alternative Cron?

Deși cron este destul de mult programatorul de sarcini standard pentru Linux, cu siguranță nu este singurul. The la comandă este perfect pentru lucrări rapide, unice, care pot fi programate chiar de pe linia de comandă, fără fișiere de configurare speciale. Dacă aveți nevoie de mai mult, există GNUbatch , care introduce noțiunea de dependență. Cu GNUbatch, puteți seta condiții specifice pentru fiecare lucrare sau puteți face o sarcină planificată să depindă de una anterioară. Ceva similar se poate realiza cu cronometre de sistem . Deși mai puțin practice de configurat decât cron, temporizatoarele systemd își pot aminti dacă o sarcină și-a pierdut programul în timp ce computerul era oprit și o poate rula data viitoare când este pornit.

Acesta este un lucru pe care cron nu îl poate face singur. Ca atare, este potrivit pentru servere și computere care rulează constant, dar nu va executa o lucrare programată în timp ce computerul era oprit. Aici e locul anacron intră în joc. Din punct de vedere tehnic, nu este o „alternativă” sau un înlocuitor pentru cron. În schimb, anacron completează cron și ar trebui să fie folosit alături de acesta, ceea ce este cazul în multe distribuții Linux, inclusiv produse Ubuntu și Ubuntu. Anacron înregistrează când a fost executată ultima sarcină și verifică dacă au existat instanțe ratate în timp ce sistemul a fost oprit. Le va rula când reporniți computerul, dar fiecare sarcină poate fi executată doar o dată pe zi.

Unele versiuni de cron, cum ar fi fcron, oferă caracteristicile anacron în mod implicit. Utilizatorii avansați ar putea dori să se uite la Hcron sau SuperCron , care aduc multe îmbunătățiri funcțiilor cron de bază, dar sunt, de asemenea, oarecum provocatoare de gestionat.

Și tu? Cum vă organizați sarcinile digitale? Ce sarcini programezi pe Linux? Împărtășiți-vă poveștile și sfaturile pentru utilizarea cron în comentarii.

Credit de imagine: tablă de programare de Gonzalo Aragon prin Shutterstock

Acțiune Acțiune Tweet E-mail 12 site-uri video care sunt mai bune decât YouTube

Iată câteva site-uri video alternative la YouTube. Fiecare ocupă o nișă diferită, dar merită adăugate la marcajele dvs.

Citiți în continuare
Subiecte asemănătoare
  • Linux
  • Linux
Despre autor Ivana Isadora Devcic(24 articole publicate)

Ivana Isadora este scriitoare și traducătoare independentă, iubitoare de Linux și fată KDE. Sprijină și promovează software-ul gratuit și open source și caută mereu aplicații proaspete și inovatoare. Aflați cum să luați legătura Aici .

Mai multe de la Ivana Isadora Devcic

Aboneaza-te la newsletter-ul nostru

Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Faceți clic aici pentru a vă abona