Практическое задание

Эта задача — шаг 9 курса «Дата и время в консоли»

Архив логов за вчера

средне~10 мин

Ночью нужно упаковывать логи магазина за прошедшие сутки. Напиши скрипт /usr/local/bin/archive-yesterday, который упаковывает каталог /var/log/shop в /srv/archive/shop-ГГГГ-ММ-ДД.tar.gz, где дата — вчерашняя (запуск в 00:05 относится к прошедшему дню). Каталог /srv/archive скрипт создаёт сам. Дату не вписывай руками. Запусти скрипт. Скрипт удобно написать во вкладке «Редактор» над терминалом — каталог /usr/local/bin открыт в ней слева.

Что потренируешь:
  • date -d
  • относительные даты
  • подстановка команд
  • tar
  • mkdir -p

Разбор темы

GNU date умеет не только печатать текущую дату, но и вычислять другие: ключ -d принимает описание вроде yesterday, 2 days ago или next monday, а формат вывода задаётся как обычно (+%F — ISO-дата ГГГГ-ММ-ДД). Это удобнее и надёжнее ручной арифметики: date сам перейдёт через границу месяца и года. Такой вызов, подставленный через $( ) в имя архива, даёт скрипт, который каждую ночь создаёт файл с датой прошедших суток, — именно так обычно именуют ночные архивы логов.

Что проверяется

  1. archive-yesterday исполняемый
  2. архив со вчерашней датой создан
  3. в имени не сегодняшняя дата
  4. в архиве логи магазина
  5. дата вычисляется, а не вписана

Как это выглядит