我正在考虑将 Tux 作为我正在构建的新 CPAN 镜像的 Web 服务器。我已经运行了它,它非常快,但有一个大问题:我应该如何轮换日志文件?
日志文件是可配置的,我使用的是默认值/var/log/tux。
一个选项是复制并截断;例如:
cp /var/log/tux /var/log/tux.1
cat /dev/null > /var/log/tux
logrotate 应用程序可以为我做到这一点,但由于日志文件是二进制的,我担心这可能会在某些时候导致损坏。
如果它只破坏一个条目,我可以忍受 - 我担心整个日志文件可能会丢失。
有经验的人可以提出建议吗?
谢谢
答案1
您可以尝试类似这样的方法,这是我编写的,用于滚动我的 nginx 日志。我查找了有关tux
用户空间进程的一些详细信息,但找不到任何方法让它重新打开日志,因此您可能不得不停止并启动该进程。
#!/bin/bash
YEAR=`date "+%Y"`
MONTH=`date "+%m"`
DAY=`date "+%d"`
HOSTNAME=`hostname -s`
LOG_FILES="access.log error.log images.log redirect.log ssl.log click.log uploads.log urchin.log user_sites.log"
DATE=$YEAR/$MONTH/$DAY
LOG_ROOT=/var/log/
NGINX_LOG_ROOT=$NGINX_LOG_ROOT/nginx
# make path
mkdir -p $NGINX_LOG_ROOT/$DATE
# touch and symlink in new log files
for FILE in $LOG_FILES; do
LOG_FILE=$NGINX_LOG_ROOT/$DATE/$HOSTNAME.$FILE
touch $LOG_FILE
ln -fs $LOG_FILE $NGINX_LOG_ROOT/$FILE
done
# tell nginx to re-open its log files
kill -USR1 `cat /var/run/nginx.pid`
答案2
在我提出建议之前“TUX 从未成为官方 Linux 内核的一部分”。您确定要自己维护内核补丁吗?
我个人会尝试创建一个 tux 写入的管道,然后使用旋转日志(来自 apache)来处理这些事情。甚至可能是记录器,以便它直接使用 syslog。
rotatelogs 可以为你处理基于时间或大小的轮换,如果你不将日志发送到中央日志服务器,我会使用它,如果你要发送到中央日志服务器,我会将其发送到 syslog,只需让 syslog 创建另一个套接字,tux 将写入该套接字(最好是 /var/log/tux),然后 syslog应该为您处理其余的事情……
答案3
我有点好奇:既然你需要在内核中运行 HTTP 引擎,你对每秒传入请求的期望是多少?tinyhttpd 还不够快吗?