php - 替换为新日志文件后,访问日志将不会记录

标签 php apache command-line nginx access-log

我正在尝试对我的 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 的性质,可能无法删除该文件,我的建议是使用相同的方法,但不实际删除日志文件。相反,只需清除它即可。

伪代码

file = open "nginx.log", READ
new_file = open tmpname, WRITE
new_file.write file.contents
file.close
new_file.close
sys_command "cat /dev/null > nginx.log"

或使用脚本

#!/bin/bash
cp nginx.log nginx.backup.log
cat /dev/null > nginx.log

这样你就不会破坏文件,并且 nginx 拥有的文件句柄仍然有效。

关于php - 替换为新日志文件后,访问日志将不会记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19890010/

相关文章:

javascript - jquery mobile ajax 将内容加载到 div 元素中会丢失它的 css 样式

php - php 中的支付网关集成

php - url 重写在本地工作但不在服务器上工作

php - 如何设置批处理文件来获取txt文件并将一些数据放入mySQL数据库中

PHP5 脚本不在 apache2 中执行 (Linux Mint)

command-line - VB6 - 构建时的行号

php - 不一致的视频转换

php - 更改 WooCommerce 中具有变体的项目的“添加到购物车”按钮文本

apache - 正在下载 CGI 文件,而不是在 nagios Web 界面中执行

MySQL 在这里不支持单行注释。会是什么原因呢?