Как вы вращаете журналы Apache в Windows, не прерывая обслуживание?

Я управляю установкой Windows Server 2003 (Standard Edition, 32-bit) под управлением Apache2 и ColdFusion. Сервер имеет более 100 виртуальных хостов, каждый с журналом доступа и журналом ошибок. Я искал аналог (или порт win32) классической команды Linux logrotate, которая позволяет вращать файлы журнала, не прерывая механизм блокировки Apache.

Каждое найденное мной решение, включая chomp, конфликтующий сценарий logrotate bash, apachelogrot и несколько сценариев ротации журналов Perl; все они:

  • остановить апач
  • повернуть журнал
  • начать Apache

Очевидно, что это нежелательно для такого количества виртуальных хостов, так как он будет останавливать и перезапускать Apache сотни раз за ночь.

Я также исследовал использование rotatelogs, которые поставляются с apache, и cronolog, которые используют конвейерный вывод для создания индивидуальных ежедневных / еженедельных / ежемесячных журналов. Эти программы не требуют перезапуска apache для вращения журналов, но они порождают экземпляр процесса для каждого файла журнала, что приводит к запуску сотен дополнительных демонов, каждый из которых занимает 200-300 КБ памяти.

Я также попытался скомпилировать классическую команду Linux logrotate на cygwin, но безуспешно.

У кого-нибудь из вас есть предложения о том, что мне следует попробовать дальше? Или, что еще лучше, кому-нибудь из вас удалось заставить классическую команду Linux logrotate компилироваться на cygwin или любом другом компиляторе win32?

1 ответ

В качестве обходного пути вы можете переключиться на использование одного журнала для всех виртуальных хостов и постобработать их, используя split-logfile или что-то подобное (чтобы получить их в отдельных журналах для каждого виртуального хоста). Это рекомендуется в документации Apache здесь. Не уверен, если это вариант в вашей среде.

Другие вопросы по тегам