15. Запуск задач в фоновом режиме и планирование задач cron, atd
Введение в фоновые задачи
Фоновые задачи — это программы или скрипты, которые выполняются системой автоматически, без вмешательства пользователя. Они являются ключевым элементом автоматизации процессов в операционных системах.
Преимущества фоновых задач:
- Автоматизация рутины: регулярные задачи выполняются без участия пользователя.
- Оптимизация времени: задачи запускаются в удобное время, например, в ночные часы.
- Уменьшение ошибок: автоматизация снижает вероятность человеческой ошибки.
Примеры задач:
- Резервное копирование.
- Уведомления и отчеты.
- Очистка временных файлов.
- Автоматические обновления.
- Скачивание файлов.
Разница между приоритетной и фоновой задачей
| Характеристика | Приоритетная задача | Фоновая задача |
|---|---|---|
| Использование терминала | Блокирует терминал | Освобождает терминал |
| Запуск | По умолчанию | С & в конце команды |
| Вывод данных | В терминал | Не отображается в терминале, если не настроен |
| Управление | Останавливается с 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:
- Демон
cron:- Постоянно работает в фоновом режиме.
- Проверяет расписания задач каждую минуту.
- Если задача совпадает с текущим временем, она запускается.
- Файлы Crontab:
- Хранят расписания задач.
- Бывают системными и пользовательскими.
- Команда
crontab:- Позволяет редактировать и управлять расписаниями пользователя.
- Логирование:
- Записи о выполнении задач сохраняются в системных логах, например,
/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