Back to: cron — планувальник завдань
0
cron — планировщик задач
cron — встроенный планировщик задач Linux, выполняющий команды по расписанию. Незаменим для резервного копирования, очистки логов, обновлений и регулярных скриптов.
crontab — пользовательские задачи
# Редактировать задачи текущего пользователя
crontab -e
# Просмотреть задачи
crontab -l
# Удалить все задачи
crontab -r
# Редактировать задачи другого пользователя (нужен root)
sudo crontab -e -u alice
sudo crontab -l -u alice
Формат crontab
# Формат: минута час день_месяца месяц день_недели команда
# * * * * * команда
#
# Диапазоны:
# минута: 0-59
# час: 0-23
# день месяца: 1-31
# месяц: 1-12 (или jan-dec)
# день недели: 0-6 (0=воскресенье, или sun-sat)
Примеры
# Каждую минуту
* * * * * /script.sh
# Каждый день в 3:00
0 3 * * * /backup.sh
# Каждый понедельник в 9:00
0 9 * * 1 /weekly-report.sh
# 1-го числа каждого месяца в полночь
0 0 1 * * /monthly-cleanup.sh
# Каждые 15 минут
*/15 * * * * /check.sh
# Каждый час с 9:00 до 17:00
0 9-17 * * * /workday-task.sh
# Каждые 2 часа
0 */2 * * * /monitor.sh
# По будням в 18:00
0 18 * * 1-5 /end-of-day.sh
# 1 и 15 числа каждого месяца
0 0 1,15 * * /bi-monthly.sh
Специальные строки
@reboot # при загрузке системы
@yearly # раз в год (0 0 1 1 *)
@annually # то же что @yearly
@monthly # раз в месяц (0 0 1 * *)
@weekly # раз в неделю (0 0 * * 0)
@daily # раз в день (0 0 * * *)
@hourly # каждый час (0 * * * *)
# Пример
@reboot /scripts/startup.sh
@daily /scripts/daily-backup.sh
/etc/crontab — системный crontab
# Формат отличается — добавлено поле пользователя:
# минута час день месяц день_недели ПОЛЬЗОВАТЕЛЬ команда
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Пример:
0 3 * * * root /usr/local/bin/backup.sh
*/30 * * * * alice /home/alice/check.sh
/etc/cron.d/ — дополнительные cron-файлы
# Формат как в /etc/crontab (с полем пользователя)
ls /etc/cron.d/
# Пример файла /etc/cron.d/myapp:
0 2 * * * root /opt/myapp/cleanup.sh
Каталоги cron
# Скрипты в этих каталогах выполняются автоматически:
/etc/cron.hourly/ # каждый час
/etc/cron.daily/ # каждый день
/etc/cron.weekly/ # каждую неделю
/etc/cron.monthly/ # каждый месяц
# Просто положите скрипт и сделайте исполняемым:
sudo cp backup.sh /etc/cron.daily/
sudo chmod +x /etc/cron.daily/backup.sh
Переменные окружения в crontab
# Можно задавать переменные
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=admin@example.com
HOME=/root
0 3 * * * /backup.sh
Логи cron
# Проверить, выполняются ли задачи
grep CRON /var/log/syslog
journalctl -u cron
# Логи конкретной задачи
grep "backup.sh" /var/log/syslog
Практическое задание
- Просмотрите текущие задачи:
crontab -l - Создайте задачу:
crontab -eи добавьте*/2 * * * * echo "$(date) hello" >> /tmp/cron-test.log - Подождите 2 минуты и проверьте:
cat /tmp/cron-test.log - Проверьте системные задачи:
cat /etc/crontab - Посмотрите каталоги:
ls /etc/cron.daily/ - Удалите тестовую задачу:
crontab -r


Добавить комментарий