Урок курса

Автоматизация задач (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.

Продолжить с проверкой и прогрессом

Откройте интерактивный раннер с заданиями урока.

Перейти к интерактивному уроку