У меня есть Perl-скрипт, к которому я добавил логирование, любезно предоставлено Log4perl .
Сам скрипт долго выполняется, и нам также нужно выполнить ротацию журнала /ежедневное архивирование.
Я решил использовать встроенный Solaris logadm
, а не Log :: Dispatch :: FileRotate , поскольку
- мы пытаемся уменьшить количество необходимых нам Perl-зависимостей, и
- У меня складывается впечатление, что делать это на уровне операционной системы вне вашего приложения - предпочтительный / наиболее надежный подход.
В рамках ротации мне также нужно получить скрипт Perl для обновления дескриптора файла.В соответствии с Log4perl FAQ вы можете настроить его на прослушивание сигнала USR1 и воссоздать дескрипторы файлов для этого:
log4perl.rootLogger = DEBUG, INFOLOG, DEBUGLOG
log4perl.appender.INFOLOG = Log::Log4perl::Appender::File
log4perl.appender.INFOLOG.filename = myprogram.info.log
log4perl.appender.INFOLOG.mode = append
log4perl.appender.INFOLOG.recreate = 1
log4perl.appender.INFOLOG.recreate_check_signal = USR1
log4perl.appender.INFOLOG.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.INFOLOG.layout.ConversionPattern = %d [%p] (%F line %L) %m%n
log4perl.appender.INFOLOG.Threshold = INFO
log4perl.appender.DEBUGLOG = Log::Log4perl::Appender::File
log4perl.appender.DEBUGLOG.filename = myprogram.debug.log
log4perl.appender.DEBUGLOG.mode = append
log4perl.appender.INFOLOG.recreate = 1
log4perl.appender.INFOLOG.recreate_check_signal = USR1
log4perl.appender.DEBUGLOG.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.DEBUGLOG.layout.ConversionPattern = %d [%p] (%F line %L) %m%n
Однако по какой-то причине всякий раз, когда я отправляюСигнал USR1 для процесса Perl, мой сценарий Perl просто завершается.
Я отправляю его с:
kill -s USR1 <pid>
Как только я это делаю, процесс Perl, похоже, умирает.Это происходит независимо от того, настроил ли я Log4perl для захвата USR1 или нет.
Я также пытался использовать USR2, тот же эффект.
Есть ли что-то очевидное, что я здесь упускаю, либо в Log4perl, либов Perl или Solaris?