Table of Contents
⏳ crontab: кратко и по делу#
crontab — утилита для управления планировщиком задач cron в Linux.
Позволяет запускать команды, скрипты и программы по расписанию: разово, периодически или сложными паттернами.
- Конфиг пользователя:
crontab -e - Глобальные настройки:
/etc/crontab - Системные задания:
/etc/cron.*(hourly,daily,weekly,monthly)
📝 Топ‑20 команд и флагов crontab#
crontab -e— редактировать задачи текущего пользователя.crontab -l— показать текущие задания.crontab -r— удалить все задания.crontab -i— удаление с подтверждением.crontab -u user— управлять заданиями другого пользователя (root only).crontab -e -u user— редактировать задания пользователя.crontab -l -u user— список заданий пользователя.crontab -r -u user— удалить задания пользователя.crontab -c— показать путь к cron-директории.crontab -s— подавлять вывод ошибок.systemctl status cron/systemctl status crond— проверить, работает ли демон.systemctl start cron— запустить cron.systemctl enable cron— включить автозапуск.grep CRON /var/log/syslog(Debian/Ubuntu) — посмотреть логи cron.journalctl -u cron(systemd) — логи демона cron.cron.allowиcron.deny— управление правами пользователей.crontab -T(BSD) — проверить корректность синтаксиса.crontab -x(Solaris) — отладка cron.at— одноразовые задания (см. ниже).anacron— выполнение пропущенных cron-задач при выключении ПК.
⏲️ Синтаксис cron#
Каждая строка в crontab состоит из 6 полей:
* * * * * команда
| | | | |
| | | | └─ День недели (0-7, где 0 и 7 = воскресенье)
| | | └──── Месяц (1-12)
| | └─────── День месяца (1-31)
| └────────── Час (0-23)
└───────────── Минута (0-59)
Примеры:#
0 5 * * * /script.sh→ каждый день в 5:0030 8 * * 1 /script.sh→ каждое понедельник в 8:30*/15 * * * * /script.sh→ каждые 15 минут0 0 1 * * /script.sh→ первое число месяца в 00:000 22 * * 1-5 /script.sh→ будни в 22:00@reboot /script.sh→ запускать при старте системы@hourly /script.sh→ раз в час@daily /script.sh→ раз в день@weekly /script.sh→ раз в неделю@monthly /script.sh→ раз в месяц
🚀 Айсберг команд crontab — от базового к гуру#
🟢 Уровень 1 — База (разогрев)#
crontab -e
- Редактировать задания пользователя
crontab -l
- Показать текущие задания
crontab -r
- Удалить все задания
systemctl status cron
- Проверить, работает ли cron
echo "* * * * * date >> ~/cron.log" | crontab -
- Добавить задание напрямую
🟡 Уровень 2 — Простые расписания#
*/5 * * * * /home/user/backup.sh
- Каждые 5 минут
0 6 * * * /home/user/script.sh
- Каждый день в 6 утра
30 23 * * 5 /home/user/db_backup.sh
- Каждый пятницу в 23:30
@reboot /home/user/startup.sh
- Выполнить при старте системы
@daily /home/user/clean.sh
- Каждый день в полночь
🟠 Уровень 3 — Работа с пользователями#
sudo crontab -e -u www-data
- Редактировать задачи
www-data
sudo crontab -l -u root
- Просмотр заданий root
sudo crontab -r -u postgres
- Удалить cron PostgreSQL
sudo tail -f /var/log/syslog | grep CRON
- Следить за выполнением задач
sudo journalctl -u cron -f
- Логи демона cron в режиме реального времени
🔵 Уровень 4 — Интеграция со скриптами#
*/10 * * * * /home/user/backup.sh >> /home/user/backup.log 2>&1
- Перенаправить stdout и stderr в лог
0 0 * * 0 /home/user/cleanup.sh && /home/user/backup.sh
- Выполнять несколько команд подряд
*/15 * * * * flock -n /tmp/lockfile /home/user/task.sh
- Использовать
flockдля защиты от параллельных запусков
@reboot sleep 60 && /home/user/startup.sh
- Задержка запуска после перезагрузки
@weekly test -x /home/user/check.sh && /home/user/check.sh
- Выполнять только если файл существует и исполним
🟣 Уровень 5 — Переменные окружения#
MAILTO="admin@example.com"
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
- Отправлять результат выполнения на почту
0 3 * * * MAILTO="" /home/user/script.sh
- Выполнить без отправки почты
0 1 * * * USER=www-data /home/user/script.sh
- Выполнить от имени другого пользователя
TZ="Europe/Moscow"
0 0 * * * /home/user/local_time_job.sh
- Разные задачи с разными часовыми поясами
🔴 Уровень 6 — Гуру‑режим#
crontab -e && systemctl restart cron
- Применить изменения сразу
echo "*/5 * * * * logger 'CRON triggered'" | sudo tee /etc/cron.d/debug
- Создать задание через
/etc/cron.d
find /etc/cron.* -type f
- Посмотреть все системные задания
sudo grep CRON /var/log/syslog
- Диагностика выполнения
cat /etc/cron.allow /etc/cron.deny
- Проверить, кто имеет доступ
🟤 Уровень 7 — Альтернативные планировщики#
anacron
- Запускает пропущенные задачи при старте
systemd-run --on-calendar="Mon..Fri 02:00" backup.sh
- Использовать systemd‑таймеры вместо cron
at 23:00
- Одноразовые задачи на сегодня
schtasks /create /sc minute /mo 10 /tn test /tr script.bat
- Windows-эквивалент
🧩 Бонус — практические сценарии#
Бэкап БД каждый день в 3 ночи:
0 3 * * * /usr/local/bin/pg_dump db > /backups/db.sql
Очистка логов каждое воскресенье в полночь:
0 0 * * 0 find /var/log -type f -name "*.log" -delete
Пинг сервера каждые 5 минут и логирование:
*/5 * * * * ping -c 1 192.168.1.1 >> /var/log/ping.log
Автоматический git-pull каждые 30 минут:
*/30 * * * * cd /home/app && git pull
Включение/отключение Wi-Fi по расписанию:
0 7 * * 1-5 nmcli radio wifi on
0 23 * * 1-5 nmcli radio wifi off