Aby utworzyć zadania cron na serwerze Linux, upewnij się, że usługa cron jest zainstalowana i uruchomiona, a następnie użyj crontab -e aby dodać harmonogram w formacie m h dom mon dow command. Zapisz plik i zweryfikuj za pomocą crontab -li sprawdź logi, aby potwierdzić wykonanie. Użyj ścieżek bezwzględnych i danych wyjściowych logów, aby zapewnić niezawodność.
W tym przewodniku dowiesz się, jak krok po kroku tworzyć zadania cron na serwerze Linux, zrozumiesz składnię cron, unikniesz typowych pułapek i zobaczysz przykłady z życia wzięte. Jako starszy specjalista ds. hostingu w YouStablePodzielę się również praktycznymi wskazówkami dotyczącymi zarządzania serwerami produkcyjnymi, aby zaplanowane zadania były zawsze wykonywane na czas.
Czym jest Cron i jak działa?
Cron to harmonogram zadań oparty na czasie dla systemów Unix/Linux. Odczytuje pliki crontab użytkownika i systemu oraz wykonuje polecenia w określonych momentach. Istnieją dwa ogólne typy: crontaby użytkownika (dla każdego użytkownika) i ogólnosystemowe. zadania cron (/etc/cron.* i /etc/cron.d). Cron działa w tle jako usługa (cron or crond).

Wymagania wstępne
- Dostęp do serwera Linux (SSH)
- Edytor tekstu (nano, vim)
- Uprawnienia sudo dla zadań systemowych
- Podstawowa znajomość wiersza poleceń
Zainstaluj i włącz Cron (popularne dystrybucje)
Większość dystrybucji domyślnie zawiera cron. Jeśli nie, zainstaluj go i włącz za pomocą swojego pakietu. manager.
# Ubuntu/Debian
sudo apt update
sudo apt install -y cron
sudo systemctl enable --now cron
sudo systemctl status cron
# RHEL/CentOS/AlmaLinux/Rocky
sudo dnf install -y cronie
sudo systemctl enable --now crond
sudo systemctl status crondZrozum składnię Crontab
Każdy wpis cron wykorzystuje harmonogram składający się z pięciu pól, po którym następuje polecenie. Harmonogram wykonuje obliczenia od lewej do prawej.
# ┌───────── minute (0-59)
# │ ┌─────── hour (0-23)
# │ │ ┌───── day of month (1-31)
# │ │ │ ┌─── month (1-12 or Jan-Dec)
# │ │ │ │ ┌─ day of week (0-7 or Sun-Sat; 0/7 = Sunday)
# │ │ │ │ │
# * * * * * command to executeSpecjalne ciągi znaków i operatory
- Specjalne ciągi znaków:
@reboot,@hourly,@daily(lub@midnight),@weekly,@monthly,@yearly/@annually - Listy:
1,15,30 - Zakresy:
1-5 - Wartości kroków:
*/5(co 5 jednostek)
Zmienne środowiskowe, które mają znaczenie
PATH: Ustaw to jawnie, aby uniknąć komunikatu „polecenie nie znaleziono”.MAILTO: Odbieraj dane wyjściowe e-mailem. Pusta wartość wyłącza pocztę.SHELLorazHOME: Zdefiniuj interpreter i katalog roboczy.
# At top of a user crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[email protected]Utwórz swoje pierwsze zadanie Cron (użytkownik Crontab)
Pliki crontab użytkownika działają jako bieżący użytkownik. Jest to idealne rozwiązanie w przypadku skryptów osobistych lub zadań na poziomie aplikacji.
# Edit (select your editor on first run)
crontab -e
# Example: run a backup every day at 02:00
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
# Verify
crontab -lUtwórz zadania Cron w całym systemie
Systemowe crony są przydatne do globalnej konserwacji lub zadań root. Możesz używać folderów takich jak: /etc/cron.hourly, /etc/cron.dailylub bardziej elastyczny /etc/cron.d katalogiem.
Korzystanie z /etc/cron.d (elastyczne i jawne)
sudo nano /etc/cron.d/nightly-backup
# File contents: note the required "user" field
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 2 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1Korzystanie z cron.hourly, cron.daily, cron.weekly, cron.monthly
Umieść skrypty wykonywalne w tych katalogach, a system będzie je uruchamiał z odpowiednią częstotliwością. Używaj ich do prostych zadań konserwacyjnych.
# Example: run daily
sudo cp cleanup.sh /etc/cron.daily/
sudo chmod +x /etc/cron.daily/cleanup.shPraktyczne przykłady cron (gotowe do kopiowania i wklejania)
1. Uruchom skrypt co 5 minut
*/5 * * * * /usr/bin/php /var/www/app/artisan schedule:run >> /var/log/laravel-schedule.log 2>&12. Cotygodniowe czyszczenie dziennika w niedziele o 03:30
30 3 * * 0 /usr/bin/find /var/log/myapp -type f -name "*.log" -mtime +14 -delete3. Zrzut bazy danych codziennie o 01:15
15 1 * * * /usr/bin/mysqldump -u backup -p'STRONGPASS' mydb
| /usr/bin/gzip > /backups/mydb-$(/bin/date +%F).sql.gz 2>&14. Uruchom przy rozruchu
@reboot /usr/local/bin/warm-cache.sh >> /var/log/warm-cache.log 2>&15. Zapobiegaj nakładaniu się wybiegów ze stadem
*/10 * * * * /usr/bin/flock -n /var/run/report.lock
/usr/local/bin/generate-report.sh >> /var/log/report.log 2>&1Testowanie, dzienniki i rozwiązywanie problemów
- Najpierw przetestuj polecenie ręcznie w powłoce.
- Użyj ścieżek bezwzględnych do plików binarnych i skryptów.
- Przekieruj dane wyjściowe do pliku dziennika:
>> /var/log/job.log 2>&1.
Gdzie znaleźć logi Cron
- Ubuntu / Debian:
grep CRON /var/log/syslogorjournalctl -u cron - RHEL/Alma/Rocky/CentOS:
less /var/log/cronorjournalctl -u crond
Najczęstsze przyczyny niedziałania crona
- Nieprawidłowa zmienna PATH lub brak ścieżek bezwzględnych.
- Uprawnienia do plików: skrypt nie jest wykonywalny (
chmod +x), niewłaściwego właściciela. - Różnice środowiskowe: cron działa w minimalnym środowisku.
- Nieprawidłowa składnia crontab lub zakończenia linii systemu Windows (użyj Unix LF).
- Wyłączony przez
/etc/cron.denylub brakuje w/etc/cron.allow. - Usługa nie działa: uruchom lub włącz
cron/crond.
Najlepsze praktyki bezpieczeństwa dla Cron
- Najmniejsze uprawnienia: użyj crontabów użytkownika, jeśli nie jest potrzebny root.
- Ścieżki bezwzględne do poleceń, skryptów i plików.
- Chroń tajemnice: preferuj pliki env lub sejf zamiast haseł wbudowanych; ogranicz uprawnienia do plików.
- Sprawdź poprawność danych wejściowych i dodaj obsługę błędów w skryptach (
set -Eeuo pipefail). - Rejestruj wszystko, obracaj dzienniki
logrotate. - Zastosowanie
flockaby uniknąć równoczesnych przebiegów inice/ionicew celu ograniczenia wpływu na system.
Cron vs Systemd Timery vs Anacron
Cron jest lekki i wszechobecny, idealny do prostych harmonogramów. Timery Systemd dodają solidne funkcje, takie jak wyrażenia kalendarzowe, losowe opóźnienia i natywne logowanie. Anacron zapewnia, że zadania okresowe nadal będą działać w systemach, które nie zawsze są włączone (np. laptopy), wykonując pominięte uruchomienia po uruchomieniu.
- Użyj crona do tworzenia precyzyjnych, częstych harmonogramów na serwerach stale włączonych.
- Używaj timerów systemd, gdy potrzebujesz zaawansowanego harmonogramu lub ustrukturyzowanych logów.
- Używaj Anacrona do codziennych/tygodniowych/miesięcznych zadań w systemach, które często przechodzą w stan uśpienia lub są ponownie uruchamiane.
WordPress: Zastąp WP Cron prawdziwym Cronem
Domyślny pseudo-cron WordPressa uruchamia się podczas ładowania stron, co może być zawodne. Wyłącz go i użyj systemowego crona dla dokładności i wydajności.
# in wp-config.php
define('DISABLE_WP_CRON', true)# Run every 5 minutes via curl (replace domain)
*/5 * * * * /usr/bin/curl -s https://example.com/wp-cron.php?doing_wp_cron=1 > /dev/null 2>&1
# Or with WP-CLI (safer, faster); set correct path
*/5 * * * * cd /var/www/html && /usr/local/bin/wp cron event run --due-now >> /var/log/wp-cron.log 2>&1Jeśli jesteś gospodarzem YouStable, Nasz managePlany WordPress i VPS obejmują środowiska gotowe na cron, WP-CLI oraz pomoc ekspertów umożliwiającą konfigurację niezawodnych harmonogramów tworzenia kopii zapasowych, aktualizacji i czyszczenia pamięci podręcznej — dzięki czemu Twoja witryna będzie szybka i spójna.
Porady ze świata rzeczywistego z produkcji
- Używaj czasu UTC w harmonogramach o znaczeniu krytycznym, aby uniknąć niespodzianek związanych z przechodzeniem na czas letni.
- Kontroluj wersje swoich skryptów i przechowuj szablony crontab w repozytorium.
- Dodaj wyraźne prefiksy dzienników i identyfikatory zadań, aby odróżnić zadania w dziennikach współdzielonych.
- W przypadku ciężkich prac planuj pracę poza godzinami szczytu i korzystaj z niej
nice/ionice. - Udokumentuj, kto jest właścicielem każdego crona i jak go bezpiecznie wyłączyć.
FAQ
1. Jak zaplanować zadanie cron w systemie Linux?
Uruchom crontab -e, dodaj wiersz, używając harmonogramu pięciopolowego i polecenia, zapisz i zweryfikuj za pomocą crontab -lUpewnij się, że usługa cron jest uruchomiona i użyj ścieżek bezwzględnych w swoim poleceniu.
2. Jaki jest format crontab?
Format to minute hour day-of-month month day-of-week command. Użyj liczb, nazw (np. pon., sty.), list (1,2), zakresy (1-5), kroki (*/10) lub specjalne ciągi znaków, takie jak @daily oraz @reboot.
3. Gdzie są przechowywane logi zadań cron?
W Ubuntu/Debianie sprawdź /var/log/syslog or journalctl -u cron. W systemach opartych na RHEL sprawdź /var/log/cron or journalctl -u crond. Przekieruj również dane wyjściowe zadania do dedykowanego pliku dziennika.
4. Dlaczego moje zadanie cron nie działa?
Najczęstsze przyczyny: nieprawidłowe ścieżki, brak uprawnień do wykonywania, błędy składni, różnice środowiskowe, zatrzymanie usługi cron lub ograniczenia poprzez cron.allow/cron.deny. Przetestuj polecenie ręcznie i dodaj rejestrowanie.
5. Czy powinienem używać timerów cron czy systemd?
Do prostych, często uruchamianych harmonogramów na serwerach cron jest idealny. Wybierz timery systemd, aby korzystać z zaawansowanych kalendarzy, jittera, zależności i lepszego rejestrowania. W przypadku laptopów lub komputerów stacjonarnych, które nie zawsze działają, dodaj anacron, aby wychwycić pominięte uruchomienia.
