在32位的系统上,单文件有大小的限制问题,在apache,cronolog的应用上,都有,如下,是apache通过cronolog后的错误提示
piped log program '/usr/local/sbin/cronolog /www/servers/apache/logs/access_log.%Y%m%d' failed unexpectedly
[Wed Aug 11 14:58:42 2010] [notice] child pid 911 exit signal File size limit exceeded (25)
piped log program '/usr/local/sbin/cronolog /www/servers/apache/logs/access_log.%Y%m%d' failed unexpectedly
1. 修改src/cronolog.c 2. 查找log_fd = open(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE);一共是两处 修改为如下log_fd = open64(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE); 如果编译不通过,可能是您的gcc版本问题,可以修改成如下 log_fd = open(pfilename, O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, FILE_MODE); 3. 修改后重新编译,然后重启apache(测试过)
另一方法
CustomLog "|/usr/local/cronolog/sbin/cronolog /www/logs/bbs.wedchina.com-%Y%m%d-access_log" combined env=!image-request加上%Y%m%d参数
或
引用自
CHOST=i686-pc-linux-gnu
CFLAGS=-march=i686 -O3 -pipe -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
CXX=gcc CXXFLAGS=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
./configure –prefix=/usr/local/cronolog-1.6.2
因为日志是通过cronolog来处理所以只要重新编译cronolog就可以了
关键是这一行代码…-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
他会让你编译后的程序调用系统支持的64bit的操作..就不会有2G文件的限制了…
也重新编译了一下cronolog,希望不再有这个错误产生,观察中^
如果apache支持2G以上文件的下载呢,下面有一方法,现在还没测试
引用自
Linux下apache支持最大文件为2G,如果要让它支持更大文件,在编译前加上:
export CFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
不加此参数的话,GCC默认是不支持大于2G的文件的。不光Apache2,其他的软件应该也适用。