Добрый день.
Не могу понять в мане logrotate одну деталь. Logrotate позволяет помещать в конфигурационный файл произвольные команды, которые можно выполнять перед и/или после ротации логов (pre(post)rotate/endscript).
Для одиночных логов, имеющих персональные секции в конфиге, применение этих скриптов понятно - зная точно какой файл подлежит ротации, можно выполнить те или иные дополнительные операции, в.т.ч. и с самим файлом.
Так же понятно как использовать эти директивы в случае, если для ротации указывается wildcard И директива «sharedscripts». В этом случае выполняется некая команда до/после выполнения всех ротаций, относящихся к данной секции. Скажем, сделали ротацию всем log файлам апача и по окончании сообщили апачу, что логи очищены.
Вот чего я не могу понять, так это как можно скомбинировать pre(post)rotate и nosharedscripts. Было бы понятно, если бы можно было передать включённому скрипту при помощи переменной имя того конкретного файла, который logrotate собирается обработать. Но в документации об этом ничего не сказано. Вот выдержка из мана: «sharedscripts: Normally, prerotate and postrotate scripts are run for each log which is rotated, meaning that a single script may be run multiple times for log file entries which match multiple files (such as the /var/log/news/* example).» И всё. А передать-то имя файла как? А если нельзя узнать какой именно лог собирается перевернуть logrotate, то какой смысл в выполнении слепого скрипта при каждой отдельно взятой ротации?
Мне бы пригодилась возможность посмотреть timestamp каждого журнала, который подлежит ротации, но как сделать это с файлом, который logrotate нашёл самостоятельно, обрабатывая wildcard?