Primjeri cron poslova su gotovi obrasci raspoređivanja i naredbe koje administratori sustava mogu kopirati, prilagođavati i pokretati putem crontaba za automatizaciju sigurnosnih kopija, ažuriranja, praćenja i održavanja. U nastavku su navedeni praktični, produkcijski testirani primjeri cron poslova s najboljim praksama za pouzdanost, sigurnost i performanse kako bi vaši Linux poslužitelji svaki put izvršavali prave zadatke na vrijeme.
Ako ti manage Linux poslužitelji, učenje primjera cron zadataka jedna je od vještina s najvećim povratom ulaganja koju možete steći. Cron automatizira repetitivne zadatke - sigurnosne kopije, čišćenje logova, SSL Obnove, zakrpe i održavanje WordPressa oslobađaju vas ručnih poslova i smanjuju rizik. Ovaj vodič sažima više od 15 godina prakse administratora sustava u sigurne, kopirane i lijepljene crontab primjere s objašnjenjima.
Kako Cron radi (kratki uvod)
Cron je vremenski bazirani planer poslova.Cron daemon čita crontab datoteke na razini sustava i po korisniku, a zatim izvršava naredbe u određeno vrijeme. Jednostavan je, lagan i sveprisutan na Linux i Unix-sličnim sustavima.
Gdje Cron čita poslove
Uobičajene lokacije uključuju:
- Korisničke crontab datoteke: managed putem
crontab -e(pohranjeno pod/var/spool/cron/) - Sistemski crontab:
/etc/crontab - Umetnute datoteke:
/etc/cron.d/(specifično za paket ili uslugu) - Periodični imenici:
/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly
Sintaksa Crontab-a (od minute do radnog dana)
Crontab koristi pet vremenskih polja iza kojih slijedi naredba. Zvjezdice odgovaraju svim vrijednostima; zarezi navode vrijednosti; crtice definiraju raspone; kose crte postavljaju korake.
# ┌─ minute (0-59)
# │ ┌─ hour (0-23)
# │ │ ┌─ day of month (1-31)
# │ │ │ ┌─ month (1-12)
# │ │ │ │ ┌─ day of week (0-7, Sun=0 or 7)
# │ │ │ │ │
# * * * * * command-to-run
# Special strings:
@reboot command
@yearly command
@monthly command
@weekly command
@daily command
@hourly commandNajbolje prakse za Cron prije početka
Postavljanje okruženja i korištenje apsolutnih putanja
Cron se pokreće s minimalnim okruženjem. Uvijek postavite PATH, koristite apsolutne putanje i zapisujte izlaz. Za složene zadatke preferirajte korištenje omotačke skripte.
# In your crontab (crontab -e)
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=admin@example.com
# Log both stdout and stderr:
# command >> /var/log/cron/myjob.log 2>&1Izbjegavajte duplicirane trke s flockom
Osigurajte da se istovremeno izvršava samo jedna instanca zaključavanjem zadatka. To sprječava preklapanje na sporim ili prometnim poslužiteljima.
*/5 * * * * flock -n /var/lock/myjob.lock /usr/local/bin/myjob.sh >> /var/log/cron/myjob.log 2>&1Planirajte za vremenske zone, ljetno računanje vremena i hostove koji ne rade 24/7
Rasporedite u UTC-u kako biste izbjegli iznenađenja s ljetnim računanjem vremena. Za prijenosna računala ili virtualne strojeve koji ne rade 24/7 koristite anacron. Na modernim distribucijama razmislite o systemd timerima za bogatiju kontrolu i semantiku kalendara.
Privilegije i sigurnost
Pokrenite kao korisnik s najmanje privilegija, dezinficirajte ulaze, stavite varijable u navodnike i izbjegavajte shell wildcardove koji se mogu nepredvidivo proširiti. Čuvajte tajne u datotekama koje može čitati root i sigurno ih referencirajte.
Najbolji primjeri Cron zadataka za sistemske administratore
1) Noćne sigurnosne kopije poslužitelja (rsync)
Zrcali ključne direktorije na sigurnosnu kopiju diska ili NAS-a. Kombinirajte s rotacijom (npr. putem direktorija s datumskom oznakom) i sinkronizacijom izvan lokacije.
0 2 * * * flock -n /var/lock/backup.lock rsync -aHAX --delete /srv/ /backup/srv/ >> /var/log/cron/backup.log 2>&12) Šifrirane inkrementalne sigurnosne kopije (Restic)
Pošaljite šifrirane snimke u pohranu objekata (S3, B2). Osigurajte da su varijable okruženja postavljene putem izvorne datoteke.
15 2 * * * . /root/.restic-env; flock -n /var/lock/restic.lock restic backup /var/www /etc --verbose && restic forget --keep-daily 7 --keep-weekly 4 --prune >> /var/log/cron/restic.log 2>&13) MySQL/MariaDB Vruće pohrane podataka
Izradite komprimirane, zastarjele dumpove i uklonite stare. Pohranite vjerodajnice u /root/.my.cnf sa strogim dozvolama.
30 1 * * * mkdir -p /backup/db && mysqldump --all-databases | gzip > /backup/db/mysql-$(date +\%F).sql.gz && find /backup/db -name 'mysql-*.sql.gz' -mtime +14 -delete4) PostgreSQL dumps
Koristiti pg_dumpall ili po bazi podataka pg_dumpOsigurajte ispravne PG varijable okruženja ili .pgpass datoteku.
40 1 * * * mkdir -p /backup/db && pg_dumpall -U postgres | gzip > /backup/db/postgres-$(date +\%F).sql.gz && find /backup/db -name 'postgres-*.sql.gz' -mtime +14 -delete5) Šifrirajmo obnovu certifikata (Certbot)
Obnoviti SSL certifikate dva puta dnevno i ponovno učitavanje web poslužitelja ako dođe do obnove. Mnoge distribucije instaliraju timer, ali cron također radi.
0 */12 * * * certbot renew --quiet --deploy-hook "systemctl reload nginx"6) Nenadzirana sigurnosna ažuriranja
Na Debianu/Ubuntuu, preferirajte unattended-upgradesAko baš morate koristiti cron, zakažite ažuriranja i ispis zapisnika.
20 3 * * * apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y upgrade >> /var/log/cron/apt-updates.log 2>&17) Okidač za rotaciju trupaca (ako je potrebno)
Većina sustava rotira logove putem logrotate i sistemskih timera. Ako vam je potreban ručni cron okidač, upotrijebite:
0 0 * * * /usr/sbin/logrotate -s /var/lib/logrotate/status /etc/logrotate.conf >> /var/log/cron/logrotate.log 2>&18) Upozorenja o korištenju diska
Pošalji e-poruku kada korištenje diska premaši prag. Prilagodite postotak prema potrebi.
*/15 * * * * df -hP | awk 'NR>1 {if (int($5)>85) print $0}' | mail -s "Disk Alert on $(hostname)" admin@example.com9) Provjere ispravnosti Systemd servisa s automatskim ponovnim pokretanjem
Pratite kritične usluge i ponovno ih pokrenite ako su neaktivne. Kombinirajte s upozorenjima za vidljivost.
*/5 * * * * systemctl is-active --quiet nginx || (systemctl restart nginx && echo "Nginx restarted on $(hostname)" | mail -s "Nginx Restarted" admin@example.com)10) Očistite privremene i predmemorijske datoteke
Održavajte privremene i predmemorijske direktorije urednima kako biste oslobodili prostor. Budite precizni s putanjama kako biste izbjegli slučajno brisanje.
30 3 * * * find /tmp -type f -mtime +3 -delete
0 4 * * 0 find /var/cache -type f -mtime +7 -delete11) Čišćenje dnevnika
Smanjite systemd dnevnik na razumnu veličinu i starost, čuvajući logove managemogućnosti.
15 4 * * * journalctl --vacuum-size=1G --vacuum-time=14d12) Docker slika i obrezivanje kontejnera
Tjedno uklanjajte neiskorištene Docker resurse radi uštede prostor na diskuPregledajte prije omogućavanja na produkcijskim hostovima.
0 5 * * 0 docker system prune -af --volumes >> /var/log/cron/docker-prune.log 2>&113) rsync s vanjskim hostom
Prenesite kritične podatke na vanjski poslužitelj preko SSH s ključevima i ograničenim dozvolama. Razmotrite prozore propusnosti.
0 1 * * * rsync -a --delete -e "ssh -i /root/.ssh/backup_key" /backup/ backupuser@offsite.example.com:/offsite/$(hostname)/14) Sigurnosne provjere (ClamAV)
Obavljajte dnevne antivirusne preglede web korijena i stavite zaražene datoteke u karantenu radi pregleda.
30 2 * * * clamscan -ri /var/www --log=/var/log/clamav/daily_scan.log --move=/var/quarantine/15) Detekcija pomaka konfiguracije
Otkrijte neovlaštene promjene pomoću kontrolnih zbrojeva ključnih direktorija i razlika u e-pošti.
*/30 * * * * (cd /etc && sha256sum -b $(find . -type f) | sort | sha256sum) | diff -q - /root/.etc.sha256 || (echo "Config drift on $(hostname)" | mail -s "Config Drift" admin@example.com); (cd /etc && sha256sum -b $(find . -type f) | sort | sha256sum > /root/.etc.sha256)Primjeri Cron Job-a prilagođeni WordPressu
Zamijenite WP-Cron sa sistemskim Cronom
Onemogući pseudo-cron (DISABLE_WP_CRON) i zakažite pravi cron za dosljedne performanse, posebno na prometnim stranicama ili stranicama s niskim prometom gdje je WP-Cron nepouzdan.
# In wp-config.php
define('DISABLE_WP_CRON', true);
# System cron (every 5 minutes):
*/5 * * * * php -q /var/www/example.com/public/wp-cron.php >> /var/log/cron/wp-cron.log 2>&1Planirani WordPress zadaci pomoću WP-CLI-ja
Sigurno pokretanje zakazanih događaja i održavanja putem WP-CLI-ja. Korisno za više lokacija ili više instalacija.
*/10 * * * * /usr/local/bin/wp --path=/var/www/example.com/public cron event run --due-now >> /var/log/cron/wp-events.log 2>&1
0 3 * * 0 /usr/local/bin/wp --path=/var/www/example.com/public cache flushAko hostirate WordPress na YouStable'S manageVPS ili cloud, naš tim može ojačati WP-Cron, konfigurirati WP-CLI zadatke i postaviti vanjske sigurnosne kopije s retencijom - tako da vaši poslovi rade brzo i predvidljivo.
Napredni obrasci raspoređivanja
Izbjegavajte gromoglasno krdo: Nasumični početak
Kada mnogo poslužitelja izvršava isti zadatak, dodajte nasumično kašnjenje kako biste rasporedili opterećenje. Koristite sleep sa slučajnim brojem.
*/5 * * * * sleep $((RANDOM % 300)); /usr/local/bin/metrics-push.shSvakih N minuta ili određenih prozora
Pokreće se svakih 15 minuta samo tijekom radnog vremena, a inače svakog sata, kombiniranjem unosa. Cron podržava vrijednosti koraka s rasponima.
# Every 15 minutes 09:00–17:59
*/15 9-17 * * * /usr/local/bin/report.sh
# Hourly outside business hours
0 0-8,18-23 * * * /usr/local/bin/report.shKoristite @reboot za jednokratne zadatke pokretanja
Inicijalizirajte predmemorije ili provjerite montiranja nakon pokretanja. Uparite s flock kako bi se izbjeglo slučajno višestruko pokretanje tijekom brzih ponovnih pokretanja.
@reboot flock -n /var/lock/boot-init.lock /usr/local/sbin/boot-init.shRješavanje problema Cron Jobs
Uobičajeni problemi i rješenja
- Neusklađenost okruženja: izvozi PATH, postavi SHELL i izvorne env datoteke ako je potrebno.
- dozvole: osigurati da su skripte izvršne i da ih posjeduje odgovarajući korisnik.
- Razlike u ljuskama: koristiti
/bin/bashako se oslanja na baš-izme. - Sječa: uvijek snimaj stdout i stderr u imenovani dnevnik.
- Obavijesti putem e-pošte: koristiti
MAILTOili poslati poštu na izlazne kodove koji nisu nula. - Provjerite zapisnike:
/var/log/syslogor/var/log/cronovisno o distribuciji i systemd-ujournalctl -u cronor-u crond.
# Test as the target user:
sudo -u www-data /usr/local/bin/script.sh
# Run the exact crontab command manually:
SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin command-hereCron u odnosu na alternative
Cron je lagan i univerzalan, ali sistemski timeri nude bogatije kalendare, ovisnosti i izvorno zapisivanje. U kontejnerima i Kubernetesima, preferirajte init sustave ili Kubernetes CronJobove. Za tijekove rada u više oblaka koristite pružatelje usluga poput Cloud Schedulera (GCP) ili EventBridge Schedulera (AWS).
Kada koristiti upravljanu pomoć
Ako je vrijeme rada ključno, prepustite dizajn i praćenje crona stručnjacima. YouStable'S managed hosting može osmisliti otporne rasporede (zaključavanja, ponovni pokušaji, upozorenja), ojačane sigurnosne kopije i sigurne kanale ažuriranja - tako da je vaša automatizacija pouzdana, revidirana i dokumentirana.
Pitanja i odgovori
Koji su najkorisniji primjeri cron poslova za Linux poslužitelje?
Sigurnosne kopije (rsync/restic), dumpovi baze podataka, SSL obnavljanja (certbot), sigurnosna ažuriranja, provjere ispravnosti diska i usluga, čišćenje logova, uklanjanje Dockera i WordPress WP-CLI rasporedi. Za najveći učinak počnite sa sigurnosnim kopijama, praćenjem i zakrpama.
Kako mogu sigurno pokrenuti cron zadatak svakih 5 minuta?
Koristiti */5 * * * *, dodati flock kako bi se spriječilo preklapanje i zapisivanje izlaza. U flotama, nasumično započni s sleep $((RANDOM % 300)) kako bi se smanjili skokovi opterećenja.
Zašto moja skripta radi ručno, ali ne iz crona?
Razlike u okruženju: PATH, SHELL i radni direktorij razlikuju se pod cronom. Koristite apsolutne putanje, odredite shell, postavite PATH i uhvatite pogreške s 2>&1Testirajte kao cron korisnik s sudo -u <user>.
Trebam li koristiti systemd timere umjesto crona?
Za složene rasporede, ovisnosti i izvorno zapisivanje, da - systemd timeri su često superiorniji. Cron ostaje izvrstan za jednostavne, prenosive zadatke i u okruženjima bez systemda.
Kako mogu slati upozorenja putem e-pošte iz cron poslova?
Postaviti MAILTO u crontab ili izlazu cijevi za mail/mailxProvjerite je li konfiguriran MTA (Postfix/ssmtp/msmtp). Na primjer: ... | mail -s "Subject" admin@example.com.