logrotate и prerotate

Проблемма с ротацией логов, точнее при ротации, в общем конфиги

/etc/logrotate.conf
include /etc/logrotate.d

/etc/logrotate.d/cron_info
/var/log/syslog-ng/cron_info.log {
weekly
mailfirst
rotate 12
compress
create 640 root log
olddir /var/log/old
missingok
prerotate
cat /var/log/syslog-ng/cron_info.log |gpg -a -e -r AAAAAAAA --bzip2-decompress-lowmem --bzip2-compress-level 9|mailx -s "cron_info $(date)"

endscript
postrotate
/etc/init.d/syslog-ng reload > /dev/null 2>&1 || true
endscript
}

В итоге логи то ротируются, а вот сообщение на почту приходит но полностью пустое, хотя должно приходить с шифрованными логами. Где моя ошибка?

Командаcat

Команда

cat /var/log/syslog-ng/cron_info.log |gpg -a -e -r AAAAAAAA --bzip2-decompress-lowmem --bzip2-compress-level 9|mailx -s "cron_info $(date)" 

данная в консоли работает так, как вы хотите?

Надеюсь, значение AAAAAAAA из этой команды соответствует значению uid, из gpg -k?
P.S. Если значение AAAAAAAA содержит пробелы, возьмите его в кавычки - 'AAAAAAAA'.

Я Gentoo & Funtoo

В консоле работает все

В консоле работает все хорошо, а вот в логротате, как то нет. Такое чувство, что она пытается отправить логи, уже после того как она файл почистила.

ТоварищЪ

Меня глючит, или ты таки забыл строчку в конфиге?

В правильном случае (с последней/актуальной версией logrotate) оно должно бы выглядеть так:

sharedscripts
prerotate
cat /var/log/syslog-ng/cron_info.log |gpg -a -e -r AAAAAAAA --bzip2-decompress-lowmem --bzip2-compress-level 9|mailx -s "cron_info $(date)" 
endscript
postrotate
/etc/init.d/syslog-ng reload > /dev/null 2>&1 || true
endscript

ЗЫ: Что лично мне не понятно, так это почему оно вообще работает...

ЗЗЫ: А ещё он (точнее --- евонный парсер конфигурационных файлов) не любит [частично] комментированных строк в объявлении команд обработки конкретного лог-файла.

:wq
--
Live free or die

Anarchist написал(а):Меня

Anarchist написал(а):
Меня глючит, или ты таки забыл строчку в конфиге?

В правильном случае (с последней/актуальной версией logrotate) оно должно бы выглядеть так:

sharedscripts
prerotate
cat /var/log/syslog-ng/cron_info.log |gpg -a -e -r AAAAAAAA --bzip2-decompress-lowmem --bzip2-compress-level 9|mailx -s "cron_info $(date)" 
endscript
postrotate
/etc/init.d/syslog-ng reload > /dev/null 2>&1 || true
endscript

На основании чего, сделано это утверждение, ведь согласно man 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).
              If sharedscript is specified, the scripts are only run once, no matter how many logs match the  wildcarded  pat-
              tern.   However, if none of the logs in the pattern require rotating, the scripts will not be run at all. If the
              scripts exit with error, the remaining actions will not be executed for any  logs.  This  option  overrides  the
              nosharedscripts option and implies create option.

Я Gentoo & Funtoo

Попробуйте сначала

Попробуйте сначала максимально упростить конфигурационный файл, тем более, как мне кажется, опция mailfirst явно лишняя:

mailfirst
              When using the mail command, mail the just-rotated file, instead of the about-to-expire file.

И, возможно, стоит оформить команду шифрования и отправки на почту в виде отдельного скрипта, который и запускать из /etc/logrotate.d/cron_info.

Я Gentoo & Funtoo

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".