我正试图在我的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
}
答案 0 :(得分:1)
正如我在评论中所说,由于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的文件句柄仍然有效。