сценарий предварительного вращения logrotate не получает имя файла для поворота

У меня проблемы со сценарием prerotate в logrotate 3.12.2. Сценарий, который я указываю в разделе prerotate / endcript , не получает имя файла, который нужно повернуть в качестве первого аргумента ( $ 1 ).

Вот конфигурация logrotate:

compress
/external-logs/syslog {
  daily
  rotate 3
  olddir OLD
  missingok
  prerotate
    /root/filter-syslog.sh
  endscript
}

Вот /root/filter-syslog.sh :

#!/bin/sh 
echo "log file subject to prerotate: $1"

Наконец, вот подробный вывод выполнения logrotate:

reading config file /external-config/logrotate.conf
olddir is now OLD
Reading state from file: /external-logs/logrotate.state
Allocating hash table for state file, size 64 entries
Creating new state

Handling 1 logs

rotating pattern: /external-logs/syslog  after 1 days (3 rotations)
olddir is OLD, empty log files are rotated, old logs are removed
considering log /external-logs/syslog
  Now: 2017-09-24 13:35
  Last rotated at 2017-09-23 12:50
  log needs rotating
rotating log /external-logs/syslog, log->rotateCount is 3
dateext suffix '-20170924'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /external-logs/OLD/syslog.3.gz to /external-logs/OLD/syslog.4.gz (rotatecount 3, logstart 1, i 3), 
old log /external-logs/OLD/syslog.3.gz does not exist
renaming /external-logs/OLD/syslog.2.gz to /external-logs/OLD/syslog.3.gz (rotatecount 3, logstart 1, i 2), 
old log /external-logs/OLD/syslog.2.gz does not exist
renaming /external-logs/OLD/syslog.1.gz to /external-logs/OLD/syslog.2.gz (rotatecount 3, logstart 1, i 1), 
old log /external-logs/OLD/syslog.1.gz does not exist
renaming /external-logs/OLD/syslog.0.gz to /external-logs/OLD/syslog.1.gz (rotatecount 3, logstart 1, i 0), 
old log /external-logs/OLD/syslog.0.gz does not exist
log /external-logs/OLD/syslog.4.gz doesn't exist -- won't try to dispose of it
running prerotate script
log file subject to prerotate: 
renaming /external-logs/syslog to /external-logs/OLD/syslog.1
compressing log with: /bin/gzip

Обратите внимание на строку « файл журнала, подлежащий предварительному вращению : "в выводе выше. Почему не выводится строка « файл журнала, подлежащий предварительному вращению: / external-logs / syslog » вместо?

0
задан 9 March 2019 в 16:44
1 ответ

Вы ничего не передаете в сценарий оболочки. Итак, $ 1 в вашем /root/filter-syslog.sh не имеет значения и поэтому ничего не печатается.

echo "log file subject to prerotate: $1"

Чтобы заставить его работать, вы должны передать $ 1 или $ @ в вашей конфигурации logrotate.

compress
/external-logs/syslog {
  daily
  rotate 9
  olddir OLD
  missingok
  prerotate
    /root/filter-syslog.sh $1
  endscript
}
3
ответ дан 4 December 2019 в 12:19

Теги

Похожие вопросы