Perl для системного администрирования

       

Параметры 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 «Введение».



Содержание раздела