📖 Теория — cron, crontab и tar

К оглавлению урока

⚡ Суть теории

  • tar = «Tape ARchive». НЕ сжимает — только объединяет файлы. Для gzip-сжатия добавить -z.
  • Флаги: -c создать, -x извлечь, -r добавить, -t просмотреть, -z gzip, -v verbose, -f имя файла.
  • cron = планировщик Unix (1970-е). Компоненты: cron tables, cron jobs, cron daemon.
  • Расписание: 5 полей — минуты часы день_месяца месяц день_недели.
  • crontab -e редактировать, -l показать, -r УДАЛИТЬ ВСЁ.

Что такое tar

tar — это утилита командной строки в операционной системе Linux, которая используется для архивации файлов и директорий в один файл. «tar» происходит от «Tape ARchive» (ленточный архив), потому что изначально она использовалась для архивации данных на магнитных лентах.

Важно: В отличие от ZIP, tar не сжимает данные — он просто создаёт один файл, включающий в себя все выбранные файлы и структуру каталогов. Для сжатия используется флаг -z (gzip).

Основные ключи и функционал tar

Ключ Пояснение Пример
-c Создание нового архива tar -cf archive.tar file1.txt file2.txt
-x Извлечение файлов из архива tar -xf archive.tar
-r Добавление файлов в существующий архив tar -rf archive.tar file3.txt directory2
-t Просмотр содержимого архива tar -tf archive.tar
-z Сжатие данных с помощью gzip tar -czf archive.tar.gz directory
-v Подробный вывод (verbose) tar -cvf archive.tar directory
-f Определение имени архива tar -cf archive.tar directory

Что такое cron

Cron — это стандартный планировщик задач в Unix и Unix-подобных операционных системах, таких как Linux. Cron появился в Unix в конце 1970-х годов и с тех пор стал одним из стандартных компонентов многих Unix-подобных систем.

Три компонента cron

Cron tables (таблицы cron)

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

  • /etc/crontab — системные задачи
  • /var/spool/cron — таблицы cron для каждого пользователя

Cron jobs (задания cron)

Сами задачи, которые нужно автоматизировать. Каждый cron job состоит из команды или скрипта, который должен быть выполнен, и расписания, которое определяет, когда задача должна быть выполнена.

Cron daemon (демон cron)

Процесс, который работает на фоне и регулярно проверяет cron-таблицы для запуска задач в соответствии с определённым расписанием.

Crontab: расписание cron

Каждая запись в файле crontab содержит пять полей, разделённых пробелами или табуляцией:

# минуты часы день_месяца месяц день_недели   команда
# (0-59) (0-23)  (1-31)      (1-12) (0-7)
*/15    *      *            *      *         /tmp/script.sh

Значения и спецсимволы

Символ Пояснение Пример
* Любое значение * в поле минут = каждую минуту
1,2,5 Список значений 1,2,5 в часах = в 1:00, 2:00 и 5:00
*/n Шаг (каждые n единиц) */15 в минутах = каждые 15 минут
n-m Диапазон значений 1-5 в часах = с 1:00 до 5:59

Примеры расписаний (из лекции)

0 2 * * *        # в 2:00 каждый день
30 8 * * 1-5     # в 8:30 с понедельника по пятницу
*/15 * * * *     # каждые 15 минут
0 0 1 * *        # в полночь первого числа каждого месяца
01 * * * *       # в 01 минуту каждого часа
Ресурс: crontab.guru — вводите расписание и получаете человекочитаемое описание. Незаменим при работе с нестандартными интервалами.

Crontab: управление заданиями

Поддерживаемые ключи команды crontab:

Ключ Пояснение
-e Редактирование текущих cron-заданий (открывает файл в текстовом редакторе)
-l Вывод текущих cron-заданий
-r Удаление ВСЕХ текущих cron-заданий (без подтверждения!)
-u user Операция от имени другого пользователя

Практика из лекции: создание задания

Создадим два файла: один — скрипт, второй — лог с результатами:

# Создаём файлы скрипта и лога
touch /tmp/script2.sh /tmp/output2.log

# Записываем содержимое скрипта (флаг -e интерпретирует \n как перенос строки)
echo -e '#!/bin/bash\n date\n echo "it works"' > /tmp/script2.sh

# Делаем скрипт исполняемым
chmod +x /tmp/script2.sh

# Открываем редактор crontab
crontab -e

Добавляем в crontab (запуск каждую минуту):

* * * * * /tmp/script2.sh >> /tmp/output2.log

Проверить наличие задания:

crontab -l

# Следить за выводом в реальном времени:
tail -f /tmp/output2.log
⚠️ Проверить по документации: Команда crontab -e по умолчанию открывает редактор vi, что может быть неудобно для начинающих. Перед запуском можно задать предпочтительный редактор:
export EDITOR=nano
crontab -e
Это задаёт nano как редактор только для текущей сессии. Для постоянного эффекта добавьте строку в ~/.bashrc.