Cron — системний планувальник, який запускає команди за розкладом: резервні копії, очищення кешу, фонові завдання CMS, імпорт прайсів. На хостингу з панеллю завдання додаються через інтерфейс (ISPmanager, cPanel), а на VPS — командою crontab.
Керування завданнями
crontab -e # редагувати завдання поточного користувача
crontab -l # переглянути
sudo crontab -e # завдання користувача root
sudo crontab -u www-data -e # завдання іншого користувача
Під час першого запуску crontab -e запропонує обрати редактор — оберіть nano. Якщо відкрився vim, див. як працювати в vim і вийти з нього.
Синтаксис
┌───── хвилина (0–59)
│ ┌───── година (0–23)
│ │ ┌───── день місяця (1–31)
│ │ │ ┌───── місяць (1–12)
│ │ │ │ ┌───── день тижня (0–7, 0 і 7 — неділя)
│ │ │ │ │
* * * * * команда
Приклади
| Розклад | Коли запускається |
|---|---|
* * * * * | щохвилини |
*/5 * * * * | кожні 5 хвилин |
0 * * * * | на початку кожної години |
30 3 * * * | щодня о 03:30 |
0 9 * * 1-5 | о 09:00 у будні |
0 0 1 * * | першого числа кожного місяця опівночі |
@reboot | один раз після завантаження сервера |
Перевірити, що означає вираз і коли буде найближчий запуск, можна нашим інструментом розбору cron-розкладу.
Типові завдання
# фонові завдання WordPress замість wp-cron при відвідуваннях
*/5 * * * * cd /var/www/site && /usr/bin/php wp-cron.php > /dev/null 2>&1
# планувальник Laravel
* * * * * cd /var/www/app && /usr/bin/php artisan schedule:run > /dev/null 2>&1
# щоденний дамп бази о 02:00
0 2 * * * mysqldump -u user -pПАРОЛЬ dbname | gzip > /root/backup/db-$(date +\%F).sql.gz
У crontab символ % має особливе значення, тому в командах його екранують: \%.
Де подивитися результат
Направте вивід у файл, щоб бачити помилки:
0 2 * * * /root/backup.sh >> /var/log/backup.log 2>&1
Факт запуску завдань видно в системному журналі:
grep CRON /var/log/syslog # Ubuntu, Debian
sudo journalctl -u cron --since today
sudo journalctl -u crond --since today # AlmaLinux, Rocky
Чому завдання не працює
- Інше оточення. Cron запускає команди з мінімальною змінною
PATH. Вказуйте повні шляхи:/usr/bin/phpзамістьphp(дізнатися шлях —which php). - Інший поточний каталог. Скрипт, що відкриває файли за відносними шляхами, не знайде їх. Додайте
cd /шлях &&перед командою. - Немає прав на виконання.
chmod +x /root/backup.sh— див. права доступу. - Часовий пояс. Cron працює за часом сервера — перевірте його командою
date(як змінити часовий пояс). - Немає порожнього рядка в кінці файлу crontab — останнє завдання може ігноруватися.
- Служба cron зупинена —
systemctl status cron.