xwill

To be double-cool

04 Jul 2024

nginx日志

##背景

随着nginx 运行,记录的access和error日志文件也会变的越来越大。无论文件存储,还是查阅都是不方便的。

我们需求:

  • 对日志能自动分割,最好按照日期,每天生成一个文件。在未来如果某一天的文件过大的话,也能再继续分割。
  • 日志文件的总大小过大后,可以自动删除较旧的文件,或者打包到另外的地方进行存档。

##方案

使用linux系统中logrotate 和 crontab两个工具

##介绍

cron 是linux里一个在后台运行任务调度的守护进程。任务调度包括:

  • 系统任务 /etc/crontab 文件
  • 用户任务 通过 crontab 工具来设置任务。定义的文件在 /var/spool/cron/crontabs/root (root 用户 && 如果已经存在任务)

用户任务的文件不要直接编辑, 使用 crontab 命令修改

1
2
crontab -l  		// 显示用户crontab任务文件
crontab -e 		//  修改crontab任务文件

任务文件中的格式 (一行一个任务)

1
2
*	*	*	*	*	command
分   时  日   月  周   执行的命令

第1列表示分钟 00~59 每分钟用*或者 */1表示 第2列表示小时 00~23(0表示0点) 第3列表示日期 01~31 第4列表示月份 01~12 第5列标识号星期 0~6(0表示星期天) 第6列要运行的命令 (使用绝对路径) 此外每一列除了数字,还可以有这些符号:

1
2
3
4
* 		代表任何时间,比如第一个 * 就代表一小时中的每分钟都执行
,		逗号分割, 占一列位置。代表不连续的时间,比如 0 8,12,16 * * * 代表每天8,1216点0分执行
- 		代表连续的范围,比如 0 5 * * 1-6 代表在周一到周六凌晨5点0分执行
*/n 	代表每个多久执行一次,比如*/10 * * * *代表每隔10分钟执行一次

logrotate 是linux中默认安装的日志文件管理工具。 。 分割日志文件,删除旧的文件,并创建新的日志文件

1
2
/etc/logrotate.conf

crontab 定时任务

##设置

##验证

###备注 环境信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

TODO

  • 代码块行号