如何在不中断服务的情况下在窗口上旋转apache日志?

我pipe理运行Apache2和ColdFusion的Windows Server 2003(标准版,32位)安装。 该服务器有100多个虚拟主机,每个虚拟主机都有一个访问日志和一个错误日志。 我一直在寻找一个经典的Linux logrotate命令的模拟(或win32端口),它允许日志文件轮换而不中断Apache的locking机制。

我find的每个解决scheme,包括chomp ,相互矛盾的logrotate bash脚本, apachelogrot和几个Perl日志轮转脚本; 他们都:

  • 停止阿帕奇
  • 旋转日志
  • 启动apache

显然,这对于如此多的虚拟主机来说是不可取的,因为它会每晚停止和重启Apache数百次。

我也调查了使用rotatelogs ,它与apache和cronolog ,它使用pipe道输出来创build个人每日/每周/每月的日志。 这些程序不需要重新启动apache来轮换日志,但是它们会为每个日志文件生成一个进程实例,从而导致运行数百个守护进程,每个守护进程消耗200到300k的内存。

我也尝试在cygwin上编译经典的Linux logrotate命令,但没有运气。

你们有没有build议我应该尝试下一步? 或者,甚至更好的是,你们有没有设法使用经典的Linux logrotate命令来编译cygwin或其他win32编译器?

作为一种解决方法,您可以切换为为所有虚拟主机使用单个日志,然后使用split-logfile或类似的方法对它们进行后处理(以便将它们按每个虚拟主机分成单独的日志)。 这在Apache的文档中推荐。 不确定这是否是您的环境中的一个选项。