Параметры Logflle Rotate
Таблица 9.3. Параметры Logflle::Rotate
Параметр | Назначение |
File | Имя файла журнала для ротации |
Count (необязательный, по умолчанию: 7) | Число хранимых копий файлов |
Gzip (необязательный, по умолчанию: путь, найденный при сборке Perl) | Полный путь к программе сжатия gzlp |
Signal | Код, выполняемый после завершения ротации, как в шаге 5 (табл. 9.2) |
Вот небольшой пример программы, в которой используются эти параметры:
use Logfile: .'Rotate;
Slogfile = new Logfile:;Rotate(
File => "/var/adm/log/syslog", Count => 5,
Gzip => "/usr/local/bin/gzip", Signal => sub (
open PID, "/etc/syslog.pid" or
die "Невозможно открыть pid-фа/.л :$'\n"; chomp($pid = <PID>); close PID;
# сначала надо проверить допустимость kill 'HUP', $pid; } ):
В результате выполнения этого фрагмента программы указанный журнал будет заблокирован и будет подготовлен модуль для ротации данного журнала. После того как этот объект создан, сама ротация журнала не представляет никакого труда:
$logfile->rotate(); undef Slogfile;
Строка undef нужна для того, чтобы убедиться, что файл журнала будет разблокирован после ротации (он заблокирован до тех пор, пока существует объект журнала).
Как говорится в документации, если с модулем работает привилегированный пользователь (например, пользователь root), необходимо кое-что учитывать. Во-первых, Logf lie. : Rotate прибегает к системному вызову для запуска программы gzip, что является потенциальной дырой в безопасности. Во-вторых, подпрограмма Signal должна быть реализована «оборонительным» способом. В предыдущем примере мы не проверяли, что идентификатор процесса, полученный из /etc/sys log.pid, действительно является идентификатором процесса для syslog. Лучше было бы использовать таблицу процессов, о чем мы говорили в главе 4 «Действия пользователей», перед тем как посылать сигнал через kill(). Более подробно советы по «защищенному» программированию приведены в главе 1 «Введение».