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
- Variabila PATH minimalistă: Mediul de execuție din cron NU încarcă fișierele
~/.bashrcsau/etc/profile! Are unPATHfoarte restrâns (adesea doar/usr/bin:/bin). Dacă apelaținode,python3saudockerfă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țiPATH=/usr/local/bin:/usr/bin:/binchiar la începutul fișierului crontab! - 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.