1. Блог
  2. Мануали

Cron у Linux: синтаксис crontab і приклади розкладів

Cron у Linux: синтаксис crontab і приклади розкладів

Cron — планувальник завдань у Linux. Він запускає команди та скрипти за розкладом: резервні копії вночі, очищення тимчасових файлів раз на тиждень, перевірку сертифікатів щодня.

Керування завданнями

Кожен користувач має власну таблицю завдань — crontab.

crontab -e    # відкрити таблицю в редакторі
crontab -l    # показати поточні завдання
crontab -r    # видалити всі завдання користувача

Щоб змінити завдання іншого користувача, додайте -u: sudo crontab -u www-data -e.

Формат рядка

* * * * * команда
│ │ │ │ │
│ │ │ │ └─ день тижня (0–7, де 0 і 7 — неділя)
│ │ │ └─── місяць (1–12)
│ │ └───── день місяця (1–31)
│ └─────── година (0–23)
└───────── хвилина (0–59)

У кожному полі допустимі:

  • * — будь-яке значення;
  • 5 — конкретне значення;
  • 1,15 — список;
  • 1-5 — діапазон;
  • */10 — кожні 10 одиниць.

Приклади розкладів

Розклад Коли виконується
* * * * * щохвилини
*/5 * * * * кожні 5 хвилин
0 * * * * на початку кожної години
30 3 * * * щодня о 03:30
0 9 * * 1-5 у будні о 09:00
0 0 1 * * першого числа кожного місяця опівночі
0 4 * * 0 щонеділі о 04:00

Для частих випадків є короткі позначення: @reboot (під час завантаження системи), @hourly, @daily, @weekly, @monthly.

Практичні завдання

Щоденна резервна копія сайту о 02:00:

0 2 * * * tar -czf /backup/site-$(date +\%F).tar.gz /var/www/site

Синхронізація каталогу кожні 15 хвилин:

*/15 * * * * rsync -a /var/www/ backup@203.0.113.20:/backup/www/

Запуск скрипта після перезавантаження сервера:

@reboot /opt/scripts/start.sh

Вивід і логи

Типово cron намагається надіслати вивід команди поштою, і на сервері без поштової служби він губиться. Перенаправляйте вивід у файл:

0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1

Запис 2>&1 додає в той самий файл повідомлення про помилки. Факт запуску завдань видно в системному журналі:

journalctl -u cron --since today      # Debian, Ubuntu
journalctl -u crond --since today     # AlmaLinux, Rocky Linux, RHEL

Захист від повторного запуску

Якщо завдання виконується довше за інтервал між запусками, копії почнуть накладатися одна на одну. Утиліта flock запускає команду, лише якщо попередній екземпляр завершився:

*/5 * * * * flock -n /tmp/sync.lock /opt/scripts/sync.sh

Типові помилки

  • Команда працює в терміналі, але не в cron. У cron мінімальне оточення й короткий PATH. Вказуйте повні шляхи до програм (/usr/bin/php) або задайте PATH першим рядком crontab.
  • Символ %. У crontab він означає перехід на новий рядок. У командах його потрібно екранувати: date +\%F.
  • Відносні шляхи. Завдання запускається з домашнього каталогу користувача. Використовуйте абсолютні шляхи або cd /path && команда.
  • Скрипт не виконуваний. Виконайте chmod +x script.sh і додайте перший рядок #!/bin/bash.
  • Часовий пояс. Cron використовує системний час. Перевірте його командою timedatectl.

Системні завдання

Крім користувацьких таблиць є системні:

  • /etc/crontab і файли в /etc/cron.d/ — той самий формат, але з додатковим полем імені користувача перед командою;
  • /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ — скрипти з цих каталогів виконуються з відповідною періодичністю.

Cron і таймери systemd

У сучасних дистрибутивах частину завдань виконують таймери systemd. Вони вміють запускати пропущені завдання після простою сервера й ведуть докладний журнал, але потребують двох файлів замість одного рядка. Для простих розкладів на VPS cron залишається найшвидшим рішенням. Переглянути активні таймери можна командою systemctl list-timers.

Відеоінструкція

YouTube video
#cron#crontab#linux#автоматизація

Ця стаття іншими мовами:EnglishРусский