【发布时间】:2013-11-22 06:57:39
【问题描述】:
我正在尝试对我的 Nginx 服务器上的访问日志文件进行短语访问。
对于文件的措辞,我只需重命名原始访问日志文件并立即创建一个新的访问日志文件,这样我就不会遗漏任何内容。
但替换文件后,Nginx 不会在该文件上记录任何内容,但会在我替换文件之前正常工作。
我重新启动 Nginx 后,Nginx 再次开始记录到替换的文件。
我看不到我做错了什么,有什么帮助吗?
PHP 代码的第一部分
if(rename("access.log", $tempname)){ // I'm renaming the access log file
$fp = fopen("access.log","wb");
if( $fp == false ){
}else{
fwrite($fp,$content); // I'm creating a new access log file
fclose($fp);
}
// I'm phrasing the renamed file here
}
【问题讨论】:
-
不确定,但我猜 nginx 会为该文件保留一个打开的文件句柄,所以它只有在 nginx 重新启动时才会打开?
-
所以我阅读了 nginx 的源代码,看起来日志文件仅在程序启动时打开,然后保留文件句柄以用于文件的任何附加。见github.com/nginx/nginx/blob/master/src/core/nginx.c#L280
标签: php apache command-line nginx access-log