урок 21 линукс

Цель урока: Освоить системный планировщик cron, который является сердцем автоматизации в Linux. Мы научимся читать, понимать и создавать задания для cron, чтобы наши скрипты и команды запускались автоматически в заданное время без нашего участия. Этот урок также затронет важные нюансы безопасности и окружения cron, чтобы ваши скрипты работали надежно, как часы.

Часть 1: Теория. Ваш личный робот-помощник cron

Вспомните наш скрипт для резервного копирования. Он очень полезен, но чтобы он сработал, вам нужно каждый раз заходить на сервер по SSH и запускать его вручную командой ./backup.sh. Это неудобно и ненадежно.

В Linux есть специальная системная служба (демон), которая называется cron. Ее единственная задача - работать в фоновом режиме и, как часы, проверять каждую минуту: "А не пора ли мне запустить какую-нибудь задачу?".

Вы, как администратор, оставляете для cron специальные "записки" с инструкциями. Такая "записка" называется заданием cron (cron job) и содержит две части:

  1. Время запуска: Когда именно нужно выполнить задачу (например, "каждую ночь в 3:15").

  2. Команда для запуска: Что именно нужно выполнить (например, /root/scripts/backup.sh).

Для каждого пользователя в системе есть свой собственный файл с такими "записками". Этот файл называется crontab (cron table - таблица cron)cron регулярно заглядывает в эти файлы и выполняет задания от имени того пользователя, которому принадлежит crontab.

Часть 2: Практика. Команда crontab и безопасность

Для управления вашим личным файлом crontab используется одноименная команда.

Важное замечание о безопасности:
На протяжении нашего курса мы работаем от имени root для простоты обучения. Однако в реальной жизни действует принцип наименьших привилегий: если задача не требует прав суперпользователя (например, скрипт для обработки файлов в домашнем каталоге обычного пользователя), ее следует запускать из crontab этого самого пользователя. crontab пользователя root следует использовать только для общесистемных задач, таких как резервное копирование системных каталогов, обновление пакетов и т.д. Это помогает избежать привычки "всё делать через root".

Основные опции команды crontab:

  • crontab -e (edit): Редактировать файл crontab текущего пользователя. Это основная команда. При первом запуске система может предложить вам выбрать текстовый редактор. Выбирайте nano, он самый простой.

  • crontab -l (list): Показать (вывести на экран) содержимое вашего текущего файла crontab.

  • crontab -u пользователь -l: Показать crontab другого пользователя (требует прав root).

  • crontab -r (remove): Полностью удалить ваш файл crontabИспользуйте с большой осторожностью!

Часть 3: Практика. Формат времени и специальные директивы

Каждая строка в файле crontab - это одно задание, и оно имеет строго определенный формат:

# ┌───────────── минута (0 - 59)
# │ ┌───────────── час (0 - 23)
# │ │ ┌───────────── день месяца (1 - 31)
# │ │ │ ┌───────────── месяц (1 - 12)
# │ │ │ │ ┌───────────── день недели (0 - 7) (Воскресенье = 0 или 7)
# │ │ │ │ │
# * * * * *  /путь/к/команде аргумент1 аргумент2
  • Звездочка * - это специальный символ, означающий "каждый".

  • День недели: Важно помнить, что Воскресенье может быть обозначено и как 0, и как 7.

Примеры:

  • 15 03 * * * - В 3 часа 15 минут ночи, каждый день.

  • 00 04 * * 1 - В 4 часа 00 минут, каждый Понедельник (1).

  • */10 * * * * - Каждые 10 минут.

Бонус: специальные директивы для простоты
Для частых сценариев существуют более простые и читаемые "псевдонимы":

  • @reboot - Выполнить один раз при каждой загрузке системы.

  • @yearly или @annually - Раз в год (0 0 1 1 *).

  • @monthly - Раз в месяц (0 0 1 * *).

  • @weekly - Раз в неделю (0 0 * * 0).

  • @daily или @midnight - Раз в день (0 0 * * *).

  • @hourly - Раз в час (0 * * * *).

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

# То же самое, что и '0 0 * * *', но гораздо понятнее
@daily /root/scripts/my_daily_script.sh

Часть 4: Окружение cron - важнейший нюанс

Это самый важный момент, о который спотыкаются новички. Вы запускаете скрипт в терминале - он работает. Вы ставите его в cron - он не работает. Почему?

Ответ: cron запускает ваши команды в очень ограниченном, минимальном окружении.

  • Он не читает ваш файл ~/.bashrc или ~/.profile.

  • У него нет ваших псевдонимов (alias).

  • Его переменная PATH (список каталогов, где ищутся команды) очень короткая, обычно /usr/bin:/bin. Он не знает о существовании программ в /usr/local/bin и других местах.

Золотые правила для cron:

  1. Всегда используйте полные пути! Не my_script.sh, а /root/scripts/my_script.sh. Не python, а /usr/bin/python3.

  2. Если сомневаетесь, узнайте путь командой whichwhich tar покажет /bin/tar.

  3. Для сложных случаев можно задать PATH прямо вверху файла crontab:
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Часть 5: Практический сценарий. Автоматизируем резервное копирование

Шаг 1: Подготовка скрипта
Создадим простой, но надежный скрипт.

cd ~/scripts
nano simple_backup.sh

Вставьте в nano следующий код:

#!/bin/bash

# Указываем, куда сохранять бэкапы
BACKUP_DIR="/root/backups"
# Указываем, что именно бэкапить
SOURCE_DIR="/etc"
# Формируем имя файла с датой
FILENAME="backup_$(date +'%Y-%m-%d_%H-%M').tar.gz"

# Создаем каталог для бэкапов, если он не существует
mkdir -p "$BACKUP_DIR"

# Используем команду tar с полным путем для надежности
/bin/tar -czvf "$BACKUP_DIR/$FILENAME" "$SOURCE_DIR"

Сохраните (Ctrl+OEnter) и выйдите (Ctrl+X).

Шаг 2: Делаем скрипт исполняемым

chmod +x simple_backup.sh

Шаг 3: Тестовый запуск вручную
Всегда проверяйте работу скрипта вручную перед автоматизацией!

./simple_backup.sh

Шаг 4: Открываем crontab для редактирования

crontab -e

Шаг 5: Добавление тестового и реального заданий
Спуститесь в самый конец файла и добавьте новую строку. Сначала добавим тестовое задание, которое будет запускаться каждую минуту, чтобы мы могли быстро проверить, работает ли cron.

Важно: Мы перенаправим вывод (>>) в лог-файл, чтобы видеть, что cron действительно запускает нашу команду. Это лучший способ отладки.

Добавьте эту строку:

# Тестовое задание для проверки работы cron
* * * * * /bin/date >> /root/cron_test.log 2>&1

Сохраните файл (Ctrl+OEnter) и выйдите (Ctrl+X). Подождите одну-две минуты, а затем проверьте содержимое лога:

cat /root/cron_test.log
Если вы видите там строки с датой - `cron` работает!

Шаг 6: Устанавливаем реальное задание
Теперь, когда мы уверены, что cron работает, поставим нашу настоящую задачу.

  1. Снова откройте crontabcrontab -e

  2. Удалите или закомментируйте (поставьте # в начале) нашу тестовую строку с date.

  3. Добавьте новую строку для запуска нашего скрипта, используя директиву @daily.

# Ежедневное резервное копирование системных конфигураций
@daily /root/scripts/simple_backup.sh >> /root/backup.log 2>&1

Сохраните и закройте файл. Теперь ваш сервер будет автоматически создавать резервную копию каталога /etc каждую полночь.

Проверить, что задание добавлено, можно командой: crontab -l

Часть 6: Заключение

Мы освоили cron - один из самых мощных инструментов в арсенале системного администратора. Вы научились не просто синтаксису, а всей процедуре: от подготовки и тестирования скрипта до безопасного добавления задания в crontab и проверки его работы через логи. Что еще важнее, вы теперь знаете о подводных камнях, связанных с окружением cron, и о принципах безопасности при выборе пользователя для выполнения задач.

На следующем, 22-м уроке, мы углубимся в тему управления пользователями. Мы уже знаем, как создавать пользователей, но теперь мы изучим, как управлять их "окружением": изменять их домашние каталоги, оболочки по умолчанию (shell), добавлять их в несколько групп и работать с файлами /etc/passwd/etc/shadow и /etc/group, чтобы лучше понимать, как система хранит информацию о пользователях.

Перейти к просмотру - УРОК №22.

подарок Промо-код: PROMO15 - скидка 15%! огонь

Введите при оформлении первого заказа на сайте: Hosting-VDS.com

авторское право цифровые решения

Помог ли вам данный ответ? 0 Пользователи нашли это полезным (0 голосов)