Samo za posjetitelje našeg bloga Ostvarite dodatna 3 mjeseca besplatno + 10% popusta na trogodišnji plan YSBLOG10
Zgrabi ponudu

Najbolji primjeri Cron zadataka za sistemske administratore za automatizaciju Linux poslužitelja

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  command

Najbolje 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>&1

Izbjegavajte 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>&1

Planirajte 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>&1

2) Š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>&1

3) 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 -delete

4) 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 -delete

5) Š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>&1

7) 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>&1

8) 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.com

9) 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 -delete

11) Č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=14d

12) 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>&1

13) 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>&1

Planirani 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 flush

Ako 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.sh

Svakih 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.sh

Koristite @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.sh

Rješ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/bash ako se oslanja na baš-izme.
  • Sječa: uvijek snimaj stdout i stderr u imenovani dnevnik.
  • Obavijesti putem e-pošte: koristiti MAILTO ili poslati poštu na izlazne kodove koji nisu nula.
  • Provjerite zapisnike: /var/log/syslog or /var/log/cron ovisno o distribuciji i systemd-u journalctl -u cron or -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-here

Cron 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.

Podijeli putem:

Sanjeet Chauhan

Sanjeet Chauhan je bloger i SEO stručnjak, posvećen pomaganju web stranicama da organski rastu. Dijeli praktične strategije, savjete i uvide za povećanje prometa, poboljšanje rangiranja i maksimiziranje online prisutnosti.

Ostavite komentar

Vaša adresa e-pošte neće biti objavljena. Obavezna polja su označena *

Dođite na vrh