Перейти к содержанию

15. Запуск задач в фоновом режиме и планирование задач cron, atd

Введение в фоновые задачи

Фоновые задачи — это программы или скрипты, которые выполняются системой автоматически, без вмешательства пользователя. Они являются ключевым элементом автоматизации процессов в операционных системах.

Преимущества фоновых задач:

  • Автоматизация рутины: регулярные задачи выполняются без участия пользователя.
  • Оптимизация времени: задачи запускаются в удобное время, например, в ночные часы.
  • Уменьшение ошибок: автоматизация снижает вероятность человеческой ошибки.

Примеры задач:

  1. Резервное копирование.
  2. Уведомления и отчеты.
  3. Очистка временных файлов.
  4. Автоматические обновления.
  5. Скачивание файлов.

Разница между приоритетной и фоновой задачей

Характеристика Приоритетная задача Фоновая задача
Использование терминала Блокирует терминал Освобождает терминал
Запуск По умолчанию С & в конце команды
Вывод данных В терминал Не отображается в терминале, если не настроен
Управление Останавливается с Ctrl+C Управляется через jobs, fg, bg
Пример использования Ручной ввод данных, отладка Долгосрочные операции, автоматизация

Пример фоновой задачи:

wget http://example.com/largefile.zip &

Пример приоритетной задачи:

ping google.com

Запуск задач в фоновом режиме

fg [номер_задачи]

Запуск с помощью &

Добавление & после команды запускает процесс в фоновом режиме.

Пример:

sleep 60 &

Управление фоновой задачей

  • jobs: просмотр фоновых задач в текущем терминале.
  • bg [номер]: перевод остановленной задачи в фоновый режим.
  • fg [номер]: возврат фоновой задачи в приоритетный режим.

Пример:

sleep 100
Ctrl+Z    # Приостановить процесс
bg        # Перевести его в фоновый режим
fg        # Вернуть в приоритетный режим

Введение в автоматизацию задач и Cron

Что такое автоматизация?

Автоматизация в Linux позволяет выполнять задачи без вмешательства пользователя. Это особенно полезно для:

  • Регулярного резервного копирования.
  • Очистки логов.
  • Выполнения обновлений или синхронизации.

Что такое Cron?

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

Принципы работы Cron

Основные компоненты Cron:

  1. Демон cron:
    • Постоянно работает в фоновом режиме.
    • Проверяет расписания задач каждую минуту.
    • Если задача совпадает с текущим временем, она запускается.
  2. Файлы Crontab:
    • Хранят расписания задач.
    • Бывают системными и пользовательскими.
  3. Команда crontab:
    • Позволяет редактировать и управлять расписаниями пользователя.
  4. Логирование:
    • Записи о выполнении задач сохраняются в системных логах, например, /var/log/syslog или /var/log/cron.

Структура и синтаксис Crontab

Открытие Crontab

Редактирование расписания текущего пользователя:

crontab -e

Просмотр всех задач:

crontab -l

Удаление всех задач пользователя:

crontab -r

Формат Crontab

Запись задачи выглядит так:

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

Пример:

30 2 * * * /path/to/script.sh
  • Запуск каждый день в 2:30 утра.

Маски в Crontab

* — любое значение:

Запуск каждую минуту, час или день.

Пример:

* * * * * echo "Hello, World!"

Диапазоны (-):

Указывает диапазон значений.

Пример:

0 9-17 * * * echo "Рабочие часы!"

Перечисление значений (,):

Указывает конкретные минуты, часы и т.д.

Пример:

0,30 9,17 * * * echo "Половина рабочего дня!"

Шаги (/):

Выполнение задачи через определённый интервал.

Пример:

*/15 * * * * echo "Каждые 15 минут!"

Примеры использования Cron

Пример 1: Ежедневное резервное копирование

Запуск скрипта для резервного копирования в 3 часа ночи:

0 3 * * * /usr/local/bin/backup.sh

Пример 2: Очистка временных файлов каждые 6 часов

0 */6 * * * rm -rf /tmp/*

Пример 3: Отправка уведомлений каждый понедельник в 8 утра

0 8 * * 1 echo "Напоминание: Встреча в 10:00" | mail -s "Напоминание" user@example.com

Пример 4: Запуск задачи только в рабочие дни

0 9 * * 1-5 /usr/local/bin/daily_report.sh

Пример 5: Логирование данных каждые 10 минут

*/10 * * * * echo "$(date): Логгирование" >> /var/log/custom.log

Введение в утилиту at

Что такое at?

  • at — это утилита для выполнения задач один раз в заданное время.
  • Используется для задач, которые не нужно запускать регулярно (в отличие от Cron).
  • Например, отправить письмо через час, завершить процесс в определённое время или выполнить резервное копирование ночью.

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

at

  • Описаниеat — это команда, которая используется для добавления задач в очередь на выполнение в определённое время.
  • Использование: Пользователь вводит команду at с указанием времени, когда нужно выполнить задачу, и затем вводит саму команду или скрипт, который должен быть выполнен.

atd

  • Описаниеatd — это демон (фоновый процесс), который отвечает за выполнение задач, запланированных с помощью команды at.
  • Функцияatd проверяет очередь задач и запускает их в указанное время. Он работает в фоновом режиме и не требует вмешательства пользователя после того, как задачи были запланированы.
  • Запуск: Обычно atd запускается автоматически при загрузке системы, но его можно также запустить вручную.

Основные команды at, atq, atrm

1. Запуск задачи с at

Команда для создания задачи:

at [время]
  • Вводите команды для выполнения в режиме at.
  • Для завершения ввода нажмите Ctrl+D.

Примеры задания времени:

  • Через 5 минут:

    bash at now + 5 minutes

  • Завтра в 10 утра:

    bash at 10am tomorrow

  • В следующую среду в 15:00:

    bash at 3pm next wednesday

  • Конкретная дата и время:

    bash at 2024-11-17 12:00


Просмотр списка задач с atq

Команда atq показывает запланированные задачи:

atq

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

1    2024-11-17 12:00 a user
2    2024-11-17 15:00 a user
  • Первая колонка — ID задачи.
  • Остальное — дата, время и пользователь.

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

Для удаления задачи используется команда atrm:

atrm [ID]

Пример:

Удалить задачу с ID 1:

atrm 1

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

Пример 1: Отправка сообщения через 1 час

echo "Уведомление: задача завершена!" | at now + 1 hour

Пример 2: Выполнение скрипта завтра в 8 утра

at 8am tomorrow
# В режиме `at` введите:
bash /path/to/script.sh
# Завершите ввод: Ctrl+D

Пример 3: Резервное копирование в указанное время

at 2am
# Введите команду для выполнения:
tar -czf /backup/backup_$(date +\%Y\%m\%d).tar.gz /home/user
# Завершите ввод: Ctrl+D

Пример 4: Завершение процесса через 15 минут

echo "kill $(pgrep myprocess)" | at now + 15 minutes

Пример 5: Очистка временных файлов через 30 минут

echo "rm -rf /tmp/*" | at now + 30 minutes