Урок курса
Автоматизация задач (cron, at)
Bash Linux + Git: от новичка до уверенного пользователяАвтоматизация задач (cron, at)
Теперь, когда мы умеем управлять процессами здесь и сейчас, поговорим о запуске задач по расписанию. Bash-скрипты часто запускают автоматически в определённое время: ежедневно, еженедельно или один раз через час.
-
cron: это демон (фоновая служба) на UNIX-системах, который занимается запуском указанных задач по заданному расписанию. У каждого пользователя может быть свой список cron-задач (cron jobs). Редактировать его можно командой
crontab -e. Формат записей в crontab включает 5 первых полей, определяющих время запуска (минуты, часы, день месяца, месяц, день недели), и затем команду для выполнения. Например:0 6 * * * /home/user/backup.sh
Эта строка означает: каждый день в 6:00 утра выполнять скрипт /home/user/backup.sh. Символ
*означает "каждое возможное значение" в данном поле (в нашем примере: каждый день месяца, каждый месяц, любой день недели). Настроив cron, можно добиться полной автономности: задачи будут выполняться регулярно без вашего участия. Главное – убедиться, что скрипт работает как задумано, потому что ошибки в нём тоже будут происходить по расписанию! -
at: утилита для назначения однократного запуска задачи в определённое время. Формат использования:
at HH:MMили, например,at now + 30 minutes, после чего вы попадаете в режим ввода команд (печатаете, какие команды выполнить в это время, потом нажимаете Ctrl+D). Пример:$ at 23:00 at> echo "Полночь близко" > ~/late.txt at> <Ctrl+D> job 5 at Wed Mar 12 23:00:00 2025Это запланирует однократное выполнение команды в 23:00 сегодняшнего дня. С помощью
atqможно посмотреть очередь задач, аatrm– удалить запланированную задачу.atхорош, когда надо что-то сделать позже единожды (например, выключить компьютер через 2 часа:echo "shutdown -h now" | at now + 120 minutes), без возни с cron и отменой расписания вручную.
Используя cron и at, ты можешь поручить машине работу на будущее: будь то регулярная очистка папки загрузок каждую неделю, отправка отчёта каждое утро или одноразовое напоминание. В связке с умениями писать скрипты – это мощный инструмент ленивого (то есть эффективного!) администратора.
Гайд по cron
Что такое cron?
cron — это демон, который запускается в фоне и периодически проверяет файлы расписания (crontab), чтобы запустить заданные задачи (скрипты или команды) в указанное время. Благодаря cron можно настроить автоматическое выполнение регулярных задач, таких как резервное копирование, обновление системных данных, отправка отчетов и многое другое.
Основы работы с crontab
1. Crontab
Каждый пользователь может иметь свой файл crontab, в котором записаны задачи для планировщика. Для редактирования своего crontab используется команда:
crontab -e
После запуска откроется текстовый редактор (обычно nano или vi), где можно добавить или изменить задачи.
2. Структура записи crontab
Запись в crontab состоит из шести полей:
* * * * * команда | | | | | | | | | +---- День недели (0-7) (0 или 7 – воскресенье) | | | +------- Месяц (1-12) | | +---------- День месяца (1-31) | +------------- Час (0-23) +---------------- Минуты (0-59)
Примеры:
0 2 * * * /home/user/backup.sh
– запуск скриптаbackup.shкаждый день в 2:00 ночи.*/5 * * * * /usr/bin/python3 /home/user/script.py
– запуск Python-скрипта каждые 5 минут.0 9 * * 1-5 /home/user/report.sh
– запуск скрипта для формирования отчета каждый будний день (с понедельника по пятницу) в 9:00 утра.
3. Специальные символы
- * – звёздочка означает "каждое возможное значение". Например,
*в поле минут означает "каждую минуту". - , – запятая используется для перечисления нескольких значений. Например,
1,15,30в поле дня месяца означает, что задача запустится 1-го, 15-го и 30-го числа. - - – дефис задаёт диапазон значений. Например,
1-5в поле дня недели означает с понедельника по пятницу. - /n – косая черта с числом означает шаг. Например,
*/10в поле минут означает "каждые 10 минут".
Примеры использования cron
Пример 1: Ежедневное резервное копирование
Запись в crontab:
0 2 * * * /home/user/backup.sh
Каждый день в 2:00 ночи выполняется скрипт резервного копирования.
Пример 2: Периодическая проверка логов
Запись в crontab:
*/15 * * * * /home/user/check_logs.sh >> /home/user/logs/check_logs.log 2>&1
Скрипт check_logs.sh запускается каждые 15 минут. Вывод команды (включая ошибки) добавляется в лог-файл.
Пример 3: Еженедельная очистка временных файлов
Запись в crontab:
0 3 * * 0 /home/user/clean_temp.sh
Каждое воскресенье в 3:00 ночи запускается скрипт очистки временных файлов.
Разбор команды at
Что такое at?
at — это планировщик задач, предназначенный для однократного запуска команд или скриптов в указанное время. В отличие от cron, который используется для периодических (регулярных) заданий, at выполняет задачу один раз в заданное время. Это удобно для задач, которые нужно выполнить в будущем, но не регулярно.
Основной синтаксис
at [опции] время
После ввода команды at с указанием времени вы переходите в интерактивный режим ввода команд, которые будут выполнены в заданное время. Завершив ввод, нужно нажать Ctrl+D, чтобы сохранить задание.
Форматы времени
Команда at поддерживает различные форматы времени. Например:
at 15:30– выполнение задачи сегодня в 15:30.at now + 2 hours– выполнение через 2 часа от текущего момента.at 10:00 tomorrow– выполнение задачи завтра в 10:00.at 5pm Aug 15– выполнение 15 августа в 17:00.
Формат может зависеть от локальных настроек системы, но общая идея – указание времени в понятном для пользователя виде.
Примеры использования
Пример 1: Однократное выполнение команды
Запустите команду:
at 15:30
После этого терминал перейдёт в режим ввода, где вы можете ввести, например:
echo "Задача выполнена!" > ~/task.log
Затем нажмите Ctrl+D для завершения ввода. Задача будет выполнена сегодня в 15:30, и вывод будет записан в файл ~/task.log.
Пример 2: Использование относительного времени
Запустите:
at now + 1 hour
Затем введите команду, которую хотите выполнить через час:
/usr/bin/python3 ~/scripts/cleanup.py
Нажмите Ctrl+D для завершения ввода.
Пример 3: Планирование задачи на следующий день
at 08:00 tomorrow
После ввода задачи нажмите Ctrl+D. Например, можно запланировать:
echo "Утренний отчёт" | mail -s "Отчёт" user@example.com
Полезные советы
-
Просмотр запланированных задач:
Командаatq(илиat -l) выводит список запланированных заданий.atq -
Удаление запланированной задачи:
Если нужно удалить задачу, используйте командуatrmс указанием номера задания, полученного изatq.atrm <номер_задания> -
Указание полного пути:
При планировании задач рекомендуется указывать полный путь к командам и файлам, чтобы избежать проблем с переменными окружения. -
Локальные настройки:
Формат времени и другие параметры могут зависеть от локальных настроек. Если возникают проблемы, проверьте документацию вашей системы или выполнитеman at.
Продолжить с проверкой и прогрессом
Откройте интерактивный раннер с заданиями урока.
