我有一个运行 ubuntu 的 1gb VPS,其中安装了 Apache、Mysql 和 PHP。
我的主目录中有 3 个站点,它们都使用基于名称的虚拟主机。我创建了三个单独的文件/etc/apache2/sites-available
并通过 a2ensite 启用了它们,其中还有一个默认站点/var/www
。
现在我担心的是,这些网站每天运行大约 10,000 个 cron 作业。如何确保每个站点的日志不会变得太大并占用所有内存?
我将如何配置日志轮换,以及需要多久使用 1GB 内存执行一次此任务?
答案1
Apache 有自己的 rotatelog 脚本. 来自手册:
rotatelog 的命令和选项是:
rotatelogs [ -l ] [ -f ] logfile rotationtime|filesizeM [ offset ]
其中选项是...
-l:导致使用本地时间而不是 GMT 作为间隔或基于大小旋转的 strftime(3) 格式的基准。请注意,在更改 GMT 偏移量的环境中(例如 BST 或 DST),使用 -l 可能会导致不可预测的结果!
-F:rotatelogs 启动后立即打开日志文件,而不是等待读取第一个日志文件条目(对于不繁忙的站点,服务器启动和处理第一个请求之间可能会有相当大的延迟,这意味着相关的日志文件直到那时才“存在”,这会导致一些自动日志记录工具出现问题)。 2.2.9 及更高版本中可用。
日志档案:日志文件的路径加基本名称。如果日志文件包含任何“%”字符,则将其视为 strftime(3) 的格式字符串。否则,将自动添加后缀 .nnnnnnnnnn,并以秒为单位表示时间。两种格式均从当前时间段的开始计算开始时间。例如,如果指定了 86400 的轮换时间,则从 strftime(3) 格式创建的小时、分钟和秒字段将全部为零,表示当前 24 小时时间段的开始时间(午夜)。使用 strftime(3) 文件名格式时,请确保日志文件格式具有足够的粒度,以便在每次轮换日志时生成不同的文件名。否则轮换将覆盖同一个文件,而不是开始一个新文件。例如,如果日志文件为 /var/logs/errorlog.%Y-%m-%d,且日志轮换为 5 MB,但同一天两次达到 5 MB,则会生成相同的日志文件名,且日志轮换将继续写入同一个文件。
旋转时间:日志文件轮换间隔时间(以秒为单位)。轮换发生在此间隔的开始。例如,如果轮换时间为 3600,则日志文件将在每个小时开始时轮换一次;如果轮换时间为 86400,则日志文件将每天午夜轮换一次。(如果在间隔期间没有记录任何数据,则不会创建任何文件。)
文件大小M:最大文件大小(以兆字节为单位),后跟字母 M 来指定大小而不是时间。
抵消 与 UTC 的偏移分钟数。如果省略,则假定为零并使用 UTC。例如,要使用时区 UTC -5 小时中的本地时间,请为此参数指定 -300 的值。在大多数情况下,应使用 -l 而不是指定偏移量。
例子:
CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
这将创建文件 /var/logs/logfile.nnnn,其中 nnnn 是日志名义上开始的系统时间(此时间将始终是轮换时间的倍数,因此您可以将 cron 脚本与其同步)。每次轮换时间结束时(此处为 24 小时后),都会开始新的日志。
CustomLog "|bin/rotatelogs -l /var/logs/logfile.%Y.%m.%d 86400" common
这将创建文件 /var/logs/logfile.yyyy.mm.dd,其中 yyyy 是年份,mm 是月份,dd 是月份中的日期。日志记录将在当地时间每天午夜切换到新文件。
CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
当日志文件达到 5 MB 大小时,此配置将轮换日志文件。
ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
此配置将在错误日志文件达到 5 MB 大小时轮换它,并且日志文件名的后缀将以 errorlog.YYYY-mm-dd-HH_MM_SS 的形式创建。
CustomLog "|bin/rotatelogs -t /var/logs/logfile 86400" common
这将创建文件 /var/logs/logfile,在启动时截断该文件,然后每天截断一次。在这种情况下,预计单独的进程(如 tail)将实时处理该文件。
您可以将这些命令放入conf文件中。