编写一个 bash 脚本来清空 apache 日志

编写一个 bash 脚本来清空 apache 日志

我有两个目录(~/www/ 和 ~/client-sites/),其中包含许多站点,每个站点都有 access.log 和 error.log 文件。

找到所有这些文件并清空其内容的最简单方法是什么?它们增长很快,所以我希望每月左右清除一次日志。

答案1

安装 logrotate(Windows 请参阅http://sourceforge.net/projects/logrotatewin):

# CentOS/RHEL
yum install logrotate
# Debian/Ubuntu
apt-get install logrotate

创建/编辑/etc/logrotate.d/httpd,示例取自 CentOS,需要针对其他发行版进行调整。

/var/log/httpd/*_log {
    weekly
    missingok
    rotate 5
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /etc/init.d/httpd reload > /dev/null
    endscript
}

答案2

确实按照你的要求去做

find ~/www/ and ~/client-sites/ \( -name 'access.log' -o -name 'error.log' \) \
    -exec sh -c '> "$1"' -- {} \;

这会将任何子目录中与文件名匹配的每个文件截断为 0 字节。

答案3

apache 网络服务器带有一个名为的实用程序rotatelogs,可用于控制日志文件。

是的,几乎没有发行版使用它。
不,他们不知道——他们只是无知。

相关内容