··back1="${name}.1"; back2="${name}.2";
··back3="${name}.3"; back4="${name}.4";
··# Если самый свежий архив журнала (back1) изменялся не позднее
··#·· заданного промежутка, значит, время ротации еще не подошло. Это
··#·· можно определить командой 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
Для максимальной пользы сценарий работает с конфигурационным файлом, который находится в каталоге
Листинг 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
Лень — двигатель прогресса! Сценарий rotatelogs демонстрирует фундаментальную идею программирования сценариев на языке командной оболочки: избегайте двойной работы. Вместо создания отдельных сценариев для ротации каждого файла журнала мы написали единый сценарий, централизованно решающий задачу ротации, что упрощает внесение модификаций.
Запуск сценария