JavaRush /Курсы /Docker SELF /Автоматизация задач с помощью cron и at

Автоматизация задач с помощью cron и at

Docker SELF
3 уровень , 5 лекция
Открыта

1. Зачем нужна автоматизация?

Автоматизация задач — это основа основ для любого системного администратора, особенно в Linux. Представьте работу без автоматизации: каждое утро вы заходите в терминал и вводите одну и ту же команду, чтобы сделать копии ваших данных, архивировать их, отправить на сервер и почистить старые логи. Через неделю такая рутина заставит вас задуматься о смене профессии… Но нет, мы тут для того, чтобы научить вас, как сделать машину своим верным слугой.

Сегодняшняя лекция — это магия времени и задач. Мы научимся автоматизировать процессы на уровне операционной системы с помощью невероятных инструментов cron и at. Эти утилиты спасают огромное количество времени, а иногда и нервов.

Автоматизация — это спасательный круг для любой рутинной задачи. Например, у вас есть скрипт, который генерирует отчёт для вашего начальника. Этот отчёт нужен каждое утро в 8:00. Вместо того чтобы вставать раньше, чтобы вручную запускать скрипт (и рисковать застрять с чашкой кофе и забыть запустить), вы можете настроить cron для выполнения этой задачи автоматически.

cron — это инструмент для регулярных задач, которые повторяются в установленное время.
at — это утилита для одноразовых задач, которые должны выполниться в конкретный момент времени.


2. Работа с cron

Что такое cron?

cron — это демон (системный процесс), который работает в фоновом режиме и выполняет задачи, запрограммированные в определённое время. Расписания для этих задач хранятся в так называемых crontab — это текстовые файлы. Каждый пользователь в системе может иметь свой собственный crontab.

Ваша первая задача в cron

Вот как выглядит базовая команда для работы с cron:

crontab -e

Эта команда открывает crontab текущего пользователя для редактирования. Вы можете добавить задачи, указав формат расписания.

Синтаксис расписания

Строка в crontab состоит из шести полей:

* * * * * COMMAND
- - - - -
| | | | └─ День недели (0–7, где 0 и 7 — воскресенье)
| | | └── Месяц (1–12)
| | └─── День месяца (1–31)
| └──── Часы (0–23)
└───── Минуты (0–59)

Пример: выполните echo "Hello, Linux" каждый день в полдень:

0 12 * * * echo "Hello, Linux"

Практика: запустим простую задачу

  1. Откройте ваш crontab для редактирования:

    crontab -e
    
  2. Добавьте строку:

    */5 * * * * echo "Hello, world! The time is $(date)" >> ~/cron_test.log
    

    Это задание будет добавлять строку с текущим временем в файл cron_test.log каждые 5 минут. Сохраните файл и выйдите.

  3. Проверьте, запустилась ли задача:

    tail -f ~/cron_test.log
    

    Через 5 минут вы должны увидеть обновлённую запись в файле.

Просмотр запланированных задач

Чтобы проверить текущие задачи:

crontab -l

Удаление задач

Чтобы удалить все задачи из crontab:

crontab -r

Реальные примеры использования cron

Архивация файлов

Допустим, вы хотите архивировать файлы из каталога /var/logs каждую ночь в 3 часа:

  1. Напишите скрипт:

    #!/bin/bash
    tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
  2. Задайте расписание в crontab:

    0 3 * * * /path/to/script.sh
    

И всё! Вы больше никогда не забудете сделать резервную копию.

Уведомление о загрузке системы

Например, вы хотите получать уведомление, если нагрузка на процессор больше 80%:

  1. Напишите скрипт:

    #!/bin/bash
    LOAD=$(uptime | awk '{print $10}' | sed 's/,//')
    if (( $(echo "$LOAD > 0.80" | bc -l) )); then
        echo "High CPU load: $LOAD" | mail -s "CPU Alert" you@example.com
    fi
  2. Установите расписание:

    */10 * * * * /path/to/cpu_check.sh
    

3. Работа с at

at позволяет выполнить одноразовую задачу в конкретное время. В отличие от cron, задачи at не повторяются. Это удобно для задач типа "сделать это завтра в 9 утра".

Простая задача с at

Вот пример, как запланировать задачу:

echo "echo 'Hello, Linux!'" | at now + 1 minute

Эта команда запустит команду echo 'Hello, Linux!' через одну минуту.

Вы можете указать точное время и дату:

echo "echo 'Backup completed!'" | at 10:30 AM tomorrow

Управление задачами at

После добавления задачи вы можете просмотреть их список:

atq

Пример вывода:

1   Tue Oct 31 10:30:00 2023 a user
2   Tue Oct 31 11:00:00 2023 a user

Чтобы удалить задачу:

atrm <job_id>

Практика: использование at для уведомлений

  1. Создайте задачу для уведомления через 2 минуты:

    echo "notify-send 'Time is up!'" | at now + 2 minutes
    
  2. Проверьте список задач:

    atq
    
  3. Ожидайте появление всплывающего окна через 2 минуты.


4. Типичные ошибки при работе с cron и at

Одной из самых частых проблем является указание неправильного пути к скрипту или команде. Помните, что cron выполняется в минимальной среде окружения, поэтому может не знать о ваших переменных, таких как PATH. Лучший способ — использовать абсолютные пути.

Например, если вы хотите запустить Python-скрипт:

*/30 * * * * /usr/bin/python3 /path/to/script.py

Также убедитесь, что скрипт имеет права на выполнение:

chmod +x /path/to/script.sh

Где это пригодится?

Навыки автоматизации требуют почти в каждой профессии, связанной с IT. Вы можете использовать эти знания:

  • Для автоматизации рутинных системных задач.
  • Для настройки периодического резервного копирования.
  • Для мониторинга состояния серверов.
  • На собеседованиях, где часто спрашивают про cron и автоматизацию.

Если вы работаете в DevOps, администрировании систем или просто хотите стать продуктивнее, понимание cron и at поможет вам выделиться и сэкономить массу времени.

Теперь вы знаете, как заставить Linux работать за вас. В следующий раз, когда кто-то будет жаловаться на рутины, просто улыбнитесь, потому что вы — мастер автоматизации!

1
Задача
Docker SELF, 3 уровень, 5 лекция
Недоступна
Работа с `crontab` для регулярных задач
Работа с `crontab` для регулярных задач
1
Задача
Docker SELF, 3 уровень, 5 лекция
Недоступна
Использование `at` для одноразовых задач
Использование `at` для одноразовых задач
1
Задача
Docker SELF, 3 уровень, 5 лекция
Недоступна
Архивация каталогов с использованием `cron`
Архивация каталогов с использованием `cron`
1
Задача
Docker SELF, 3 уровень, 5 лекция
Недоступна
Автоматическое уведомление о CPU нагрузке
Автоматическое уведомление о CPU нагрузке
Комментарии (9)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 64
24 сентября 2025
Первая задача.... В итоге приняло вот такое:

echo "*/2 * * * * date > ~/task1.log" | crontab -
crontab -l
sleep 120 && tail -n 1 ~/task1.log
Я хочу чтобы у автора этого задания случилось что-нибудь довольно плохое. Я шлю ему лучи космического поноса и добавляю это задание в формате "0 3 * * 1 luchi_kosmicheskogo_ponosa.sh"
Slevin Уровень 64
24 сентября 2025
Например, вы хотите получать уведомление, если нагрузка на процессор больше 80%: Напишите скрипт:

#!/bin/bash
LOAD=$(uptime | awk '{print $10}' | sed 's/,//')
if (( $(echo "$LOAD > 0.80" | bc -l) )); then
    echo "High CPU load: $LOAD" | mail -s "CPU Alert" you@example.com
fi
Я случайно вызвал Сатану, что делать?
Ilya Klimchev Уровень 1
13 сентября 2025
проц надо каждые 10 секунд проверять. Хотя бы.
PaulGazol Уровень 1
7 мая 2025
И еще одна задача без валидации нормальной. Кажется к концу курса можно будет считать процент бракованных заданий
13 апреля 2025
В первом задании проверку не проходит даже решение из подсказки...
16 марта 2025
Первая задача вообще в тупик поставила
7 марта 2025
Решение 1 задачи прошло только в IDEA, здесь в валидаторе последний пункт не проходит.
Константин Contact Уровень 20
11 марта 2025
У меня прошло, когда я вывод даты завернул в ' ' - как было в примере
Stitch Уровень 14
4 марта 2025
неплохо бы явно объяснить разницу между */5 * * * * и 5 * * * *