Planificarea Sarcinilor Automate cu crontab (Cron Jobs) în Linux / Bash

Scripting Bash Standard Linux

Ghid complet pentru planificarea sarcinilor periodice în Linux cu crontab: sintaxa celor 5 câmpuri de timp, redirecționarea ieșirilor și rezolvarea capcanelor legate de variabilele de mediu.

Sintaxă comandă
crontab -e | crontab -l | */5 * * * * /cale/script.sh >> /var/log/cron.log 2>&1

Serviciul daemon cron este mecanismul standard de planificare a execuției automate a comenzilor și scripturilor la intervale fixe de timp (ore, zile, săptămâni sau minute). Fiecare utilizator din sistem își poate defini propriul tabel de sarcini programate folosind comanda crontab.

Sintaxa celor 5 câmpuri de timp din crontab
# Formatul unei linii din crontab:
# .---------------- Minutul (0 - 59)
# |  .------------- Ora (0 - 23)
# |  |  .---------- Ziua din lună (1 - 31)
# |  |  |  .------- Luna din an (1 - 12 sau JAN-DEC)
# |  |  |  |  .---- Ziua din săptămână (0 - 6, unde 0=Duminică, sau SUN-SAT)
# |  |  |  |  |
# *  *  *  *  *  comandă_de_executat >> /cale/log.log 2>&1

# Exemple practice:
# 1. Rulează în fiecare noapte la ora 02:30:
30 2 * * * /opt/scripts/backup_db.sh >> /var/log/backup.log 2>&1

# 2. Rulează din 15 în 15 minute:
*/15 * * * * /usr/bin/php /var/www/site/cron.php > /dev/null 2>&1

# 3. Rulează în fiecare zi de Luni la ora 09:00:
0 9 * * 1 /usr/local/bin/trimite_raport_saptamanal.sh

Comenzi Esențiale pentru Administrarea Crontab

  • crontab -e: Deschide fișierul crontab al utilizatorului curent în editorul implicit (nano sau vim) pentru adăugarea sau modificarea sarcinilor.
  • crontab -l: Listează toate sarcinile active din crontab-ul utilizatorului curent.
  • crontab -r: Atenție! Șterge complet toate sarcinile din crontab-ul curent (fără confirmare prealabilă în unele sisteme).
  • sudo crontab -u www-data -e: Editează crontab-ul unui alt utilizator de sistem (ex: utilizatorul serverului web).

Cele 2 Mari Capcane de Producție cu Cron

  1. Variabila PATH minimalistă: Mediul de execuție din cron NU încarcă fișierele ~/.bashrc sau /etc/profile! Are un PATH foarte restrâns (adesea doar /usr/bin:/bin). Dacă apelați node, python3 sau docker fără calea absolută, comanda va eșua cu command not found. Soluție: Folosiți întotdeauna căi absolute (ex: /usr/local/bin/node) sau definiți PATH=/usr/local/bin:/usr/bin:/bin chiar la începutul fișierului crontab!
  2. Redirecționarea ieșirilor: Dacă o comandă emite mesaje sau erori și nu redirecționați ieșirea (>> fisier.log 2>&1), daemonul cron va încerca să trimită un email intern către root, umplând partiția /var/mail.