Как вы вращаете журналы 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 здесь. Не уверен, если это вариант в вашей среде.