Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
··#·· заданного промежутка, значит, время ротации еще не подошло. Это
··#·· можно определить командой find с флагом −mtime.
··if [-f "$back1"]; then
····if [-z "$(find \"$back1\" −mtime +$duration −print 2>/dev/null)"]
····then
······/bin/echo −n "$name's most recent backup is more recent than $duration "
······echo "days: skipping"; continue
····fi
··fi
··echo "Rotating log $name (using a $duration day schedule)"
··# Ротация начинается с самого старого архива, но будьте осторожны,
··#·· так как некоторые файлы могут просто отсутствовать.
··if [-f "$back3"]; then
····echo"… $back3 — > $back4"; $mv −f "$back3" "$back4"
··fi
··if [-f "$back2"]; then
····echo"… $back2 — > $back3"; $mv −f "$back2" "$back3"
··fi
··if [-f "$back1"]; then
····echo"… $back1 — > $back2"; $mv −f "$back1" "$back2"
··fi
··if [-f "$name"]; then
····echo"… $name — > $back1"; $mv −f "$name" "$back1"
··fi
··touch "$name"
··chmod 0600 "$name" # Последний шаг: изменить права файла на rw-························для безопасности
done
if [$count −eq 0]; then
··echo "Nothing to do: no log files big enough or old enough to rotate"
fi
exit 0
Для максимальной пользы сценарий работает с конфигурационным файлом, который находится в каталоге /var/log , позволяя администратору определять разные периоды ротации для разных файлов журналов. В листинге 6.13 показано содержимое типичного конфигурационного файла.
Листинг 6.13.Пример конфигурационного файла для сценария rotatelogs
# Конфигурационный файл для сценария ротации файлов журналов:···· Формат name=duration,
#·· где name может быть именем любого файла в каталоге /var/log, а duration
#·· измеряется в днях.
ftp.log=30
lastlog=14
lookupd.log=7
lpr.log=30
mail.log=7
netinfo.log=7
secure.log=7
statistics=7
system.log=14
# Файлы с периодом ротации, равным нулю, игнорируются.
wtmp=0
Как это работает
Основу и, пожалуй, самую замысловатую часть сценария составляет команда find . Она возвращает все файлы в каталоге /var/log с размером больше нуля, имена которых не содержат цифр, не начинаются с точки (OS X, например, создает в этом каталоге массу файлов журналов с бессмысленными именами, и их все следует пропустить) и не заканчиваются расширением conf (вполне очевидно, что не имеет смысла выполнять ротацию нашего конфигурационного файла rotatelogs.conf ). Параметр maxdepth 1 гарантирует, что find не будет выполнять поиск в подкаталогах, а команда sed в самом конце удалит все ведущие последовательности./ из найденных совпадений.
Лень — двигатель прогресса! Сценарий rotatelogs демонстрирует фундаментальную идею программирования сценариев на языке командной оболочки: избегайте двойной работы. Вместо создания отдельных сценариев для ротации каждого файла журнала мы написали единый сценарий, централизованно решающий задачу ротации, что упрощает внесение модификаций.
Запуск сценария
Этот сценарий не принимает аргументов, но сообщает, какие журналы были подвергнуты ротации и почему. Кроме того, его следует запускать с привилегиями root.
Результаты
Пользоваться сценарием rotatelogs просто, как демонстрирует листинг 6.14, но имейте в виду, что в зависимости от прав доступа к файлам может потребоваться запускать его с привилегиями root.
Листинг 6.14.Запуск сценария rotatelogs с привилегиями root для ротации журналов в /var/log
$ sudo rotatelogs
ftp.log’s most recent backup is more recent than 30 days: skipping
Rotating log lastlog (using a 14 day schedule)
… lastlog — > lastlog.1
lpr.log’s most recent backup is more recent than 30 days: skipping
Обратите внимание, что в данном примере критериям поиска соответствуют только три файла журналов. Из них только для lastlog не было создано достаточно свежей копии, согласно настройкам периода ротации в конфигурационном файле. Повторный запуск сценария rotatelogs, однако, не дал ничего, как показано в листинге 6.15.
Листинг 6.15.Повторный запуск rotatelogs показал отсутствие журналов, требующих ротации
$ sudo rotatelogs
ftp.log’s most recent backup is more recent than 30 days: skipping
lastlog’s most recent backup is more recent than 14 days: skipping
lpr.log’s most recent backup is more recent than 30 days: skipping
Усовершенствование сценария
Одно из усовершенствований, которое можно добавить в сценарий, чтобы сделать его еще более полезным, — реализовать отправку самого старого архива, файла $back4, по электронной почте или копирование в облачное хранилище перед уничтожением командой mv. Проще всего отправку по электронной почте вставить в сценарий перед командой:
echo"… $back3 — > $back4"; $mv −f "$back3" "$back4"
Другое полезное расширение в rotatelogs — сжатие всех архивированных файлов для экономии дискового пространства; для этого необходимо, чтобы сценарий распознавал и правильно обрабатывал сжатые файлы.
№ 51. Управление резервными копиями
Управление резервным копированием системы — задача, хорошо знакомая всем системным администраторам и очень неблагодарная. Никто никогда не скажет: «Резервное копирование мне здорово помогло — отличная работа!». Некоторые виды резервного копирования жизненно необходимы даже для систем Linux с единственным пользователем. К сожалению, ценность этой операции мы нередко осознаем только после потери данных и файлов. Одна из причин, почему пользователи Linux часто пренебрегают резервным копированием, — неудобство и сложность многих инструментов резервного копирования.
Сценарий командной оболочки может решить эту проблему! Сценарий в листинге 6.16 копирует указанный набор каталогов, инкрементально (то есть отбирая только файлы, изменившиеся после предыдущего резервного копирования) или целиком (копируя все файлы). В процессе производится сжатие, чтобы уменьшить потребление дискового пространства, и вывод сценария можно направить в файл, на ленточный накопитель, на смонтированный удаленный раздел NFS, в облачное хранилище (как будет показано далее в книге) и даже на DVD.
Код
Листинг 6.16.Сценарий backup
#!/bin/bash
# backup — Создает полную или инкрементальную резервную копию набора
#·· каталогов в системе. По умолчанию выходной файл сжимается
#·· и сохраняется в /tmp, в файле с именем, содержащим время создания копии.
#·· При желании можно указать устройство для вывода (другой диск, съемное
#·· устройство хранения или что-то другое по вашему выбору).
compress="bzip2" # Измените, если предпочитаете другую программу сжатия.
inclist="/tmp/backup.inclist.$(date +%d%m%y)"
Интервал:
Закладка: