Cron & crontab, explicat

Lucaine publicat cu ceva timp in urma excelent tutorial despre cron și crontab asta cred că merită împărtășit. Cron este un fel de echivalent cu sarcinile programate în Windows, doar că este manipulat de la terminal. Cei care preferă o interfață vizuală pentru a atinge același obiectiv, pot vedea acest lucru un alt articol.

Ce este cron?

Numele cron provine din grecescul chronos care înseamnă „timp”. În sistemul de operare Unix, cron este un manager de proces obișnuit (daemon) care rulează procese sau scripturi la intervale regulate (de exemplu, în fiecare minut, zi, săptămână sau lună). Procesele care trebuie executate și ora la care trebuie executate sunt specificate în fișierul crontab.

lucrari COMO

Demonul cron începe de la /etc/rc.d/ o /etc/init.d în funcție de distribuție. Cron rulează în fundal, verifică tabelul de sarcini crontab în fiecare minut / etc / crontab o o / var / spool / cron în căutarea sarcinilor de îndeplinit. Ca utilizator, putem adăuga comenzi sau scripturi cu sarcini pe cron pentru a automatiza unele procese. Acest lucru este util, de exemplu, pentru a automatiza actualizarea unui sistem sau a unui sistem de backup bun.

Articol asociat:
Tutorial: Instalați pachetele .tar.gz și .tar.bz2

Ce este Crontab?

Crontab este un fișier text simplu care stochează o listă de comenzi care trebuie executate la un moment specificat de utilizator. Crontab va verifica data și ora când ar trebui executat scriptul sau comanda, permisiunile de execuție și o va face în fundal. Fiecare utilizator poate avea propriul fișier crontab, de fapt / etc / crontab se presupune că este fișierul crontab al utilizatorului rădăcină, atunci când utilizatorii normali (și chiar rădăcina) doresc să își genereze propriul fișier crontab, atunci vom folosi comanda crontab.

Crontab este cel mai simplu mod de a gestiona sarcinile cron pe sisteme multi-utilizator, fie ca simplu utilizator de sistem, fie ca utilizator root.

Folosind crontab

Începem cu un exemplu simplu.

Vom automatiza actualizarea unui sistem, pentru a elimina enervantul „Trebuie să actualizez întotdeauna și nu-mi place asta!”

Cum să
Articol asociat:
Comenzi pentru cunoașterea sistemului (identificarea hardware-ului și a unor configurații software)

În primul rând vom realiza un scenariu. Acest script va fi apelat de cron și va conține toate instrucțiunile pe care dorim să le facă, de aceea este necesar să îl testăm în mai multe cazuri și în mai multe moduri înainte de a-l include în cron, un script de actualizare simplu ca acesta:

#! / bin / bash # exemplu de actualizare script # alegeți distribuția dvs. # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Eliminați # de pe linia dvs. de distribuție. În cazul în care este Ubuntu / Debian, începe cu apt-get.

Salvăm scriptul ca update.sh (de exemplu, directorul de scripturi acasă). Modificăm permisiunile de execuție ale scriptului menționat cu:

chmod a + x ~ / scripts / update.sh

Executăm scriptul de câteva ori pentru a verifica dacă totul funcționează fără probleme, modificăm ceea ce este necesar (nu trebuie să conțină erori, altfel cron va repeta o eroare doar iar și iar). Acum, pentru a adăuga sarcina la crontab-ul nostru.

Adăugați sarcini la crontab

Executăm ediția crontab cu crontab -e, în unele distribuții (cum ar fi Ubuntu) ne oferă opțiunea de a alege editorul de text pe care îl dorim, restul ne-a rămas cu vi. Fișierul crontab va arăta cam așa.

# mh dom mon dow user command

Unde:

  • m corespunde minutului în care va fi executat scriptul, valoarea variază de la 0 la 59
  • h ora exactă, formatul de 24 de ore este gestionat, valorile variază de la 0 la 23, 0 fiind la miezul nopții 12:00.
  • cadou se referă la ziua lunii, de exemplu, puteți specifica 15 dacă doriți să rulați la fiecare 15 zile
  • dow înseamnă ziua săptămânii, poate fi numerică (de la 0 la 7, unde 0 și 7 sunt duminică) sau primele 3 litere ale zilei în limba engleză: lun, mar, wed, joi, vin, sat, soare.
  • utilizator definește utilizatorul care va executa comanda, poate fi root sau un alt utilizator, atâta timp cât au permisiunile de a executa scriptul.
  • comandă se referă la comanda sau calea absolută a scriptului de executat, exemplu: /home/usuario/scripts/update.sh, dacă apelează un script, acesta trebuie să fie executabil

Pentru a fi clar câteva exemple de sarcini cron explicate:

15 10 * * * utilizator /home/usuario/scripts/update.sh

Acesta va rula scriptul update.sh la 10:15 în fiecare zi

15 22 * * * utilizator /home/usuario/scripts/update.sh

Acesta va rula scriptul update.sh la 10:15 în fiecare zi

00 10 * * 0 root apt-get -y update Utilizator rădăcină

Va rula o actualizare în fiecare duminică la 10:00

45 10 * * Sun Root APT -GET -Y UPDATE

Utilizatorul rădăcină va rula o actualizare în fiecare duminică (Duminică) la 10:45 dimineața

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

Pe 20 noiembrie la 7:30 utilizatorul va rula scriptul

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

Pe 11 noiembrie la 7:30 și adică duminică, utilizatorul își va sărbători administratorul (adică eu)

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

Un memento enervant în fiecare minut din fiecare oră în fiecare zi (NU este recomandat).

Ele pot fi încă manipulate game speciale:

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

La 5:30 după-amiaza în fiecare zi de luni până vineri.

00 12 1,15,28 * *

La 12 am fiecare primă, cincisprezecea și 28 a fiecărei luni (ideal pentru salarizare)

Dacă acest lucru este confuz, mânere crontab șiruri speciale pentru a defini aceste intervale.

@reboot Rulați o dată, la pornire
@yearly rulează doar o dată pe an: 0 0 1 1 *
@anual la fel ca @anual
@lunar rulează o dată pe lună, prima zi: 0 0 1 * *
@weekly Weekly primul minut din prima oră a săptămânii. 0 0 * * 0 ″.
@ zilnic, la 12:00 AM 0 0 * * *
@midnight la fel ca @ zilnic
@hourly în primul minut al fiecărei ore: 0 * * * *

Utilizarea sa este foarte simplă.

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

Ultimul, dar nu cel din urmă:

Managementul locurilor de muncă Cron

fișier crontab

Înlocuiți fișierul crontab existent cu un fișier definit de utilizator

crontab -e

Editați fișierul crontab al utilizatorului, fiecare nouă linie va fi o nouă sarcină crontab.

crontab -l

Enumerați toate sarcinile crontab ale utilizatorului

crontab -d

Ștergeți crontab-ul utilizatorului

crontab -c dir

Definește directorul crontab al utilizatorului (acesta trebuie să aibă permisiunile de scriere și executare ale utilizatorului)

crontab -u utilizator

prefix pentru a gestiona crontabul altui utilizator, exemple:

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

Acest instrument, ca multe altele, poate fi văzut mai în profunzime și mai detaliat în:

Mulțumesc Lucain!