Я задавал этот вопрос в Unix и Linux, но я думаю, что здесь он подходит лучше.
В настоящее время я использую следующую конфигурацию logrotate.d
/var/log/messages
{
daily
compress
rotate 7
postrotate
/bin/kill -HUP `cat /var/run/syslog-ng.pid 2> /dev/null` 2> /dev/null || true
endscript
}
Однако в официальном примере logrotate в репозитории syslog-ng я вижу, что вместо kill -HUP они выполняют перезагрузку, например:
/var/log/syslog.log {
rotate 7
daily
compress
postrotate
/etc/init.d/syslog-ng reload >/dev/null
endscript
}
Есть ли существенная разница между этими двумя методами, которые заставят их работать, но мой способ не работает, или вы ожидаете, что возникнет какая-то другая проблема? Это довольно старая версия syslog-ng, поэтому я не уверен, может ли это быть связано с ней.
Для дополнительного контекста вот функция перезагрузки из моей версии сценария инициализации syslog-ng.
reload()
{
verify_config
echo -n $"Reloading syslog-ng: "
killproc syslog-ng -HUP
RETVAL=$?
echo
return $RETVAL
}
Я действительно проверял lsof, свободную память и многое другое, когда система находилась в неисправном состоянии и не заметил ничего слишком подозрительного в состоянии системы.
Проблема не была связана с logrotate, и проблема, похоже, решена путем обновления до более новой версии syslog-ng (до 3.9.1). Я думаю, что основной причиной была ошибка, вызванная большой нагрузкой на сервер. Я мог сказать, что это не проблема с postrotate, поскольку оба примера успешно перезагрузили службу, а в более старой версии изменение между ними в конечном итоге не изменило поведение при сбое.