日志轮替

日志轮替
logrotate简介
       logrotate是一个日志管理程序,用来把旧的日志文件删除(或者备份),并创建新的日志文件。有两种依据来进行日志的轮替:

根据日志的大小,当文件大小达到某个阈值(设定),就进行轮替。
根据其规定的天数来转储。在规定时间到了之后就进行日志文件的轮替。 
       logrotate 的执行由crond服务实现。在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate。它每天由cron在指定的时间(/etc/crontab)启动。 
       在执行logrotate时,需要指定其配置文logrotate.conf。/etc/logrotate.d目录下面的配置文件会被主动读入到logrotate.conf。
语法规则
       如果你安装了一个新的服务,它的日志转储的规则可以建立一个专门的配置文件,放在/etc/logrotate.d下面。并按照以下语法进行编写:

/var/log/messages   #文件位置与名字
{
size 1M  #当文件大于1M自动轮替
    daily   #文件每天指定时间进行轮替
    rotate 10   #保存10个备份文件
    create 0600 root root   #备份后新建一个文件
    dateformat -%Y%m%d.%s   #使用时间名作为备份日志后缀名
    sharedscripts   
    postrotate  #在日志转储以后执行的命令
     /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
# 重新启动守护进程,否则日志不会写入新建的日志文件
endscript

在{}中定义的规则,如果与logrotate.conf中的冲突,以/etc/logrotatate.d/中的文件定义的为准。
--------------------- 
版权声明:本文为CSDN博主「_气呀呀呀」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/l_vip/article/details/78540257

可以使用时间戳来判断哪个日志文件是最先创建的,从而进行删除。以下是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/stat.h> #include <string.h> #define LOG_FILE_PREFIX "./log_" #define LOG_FILE_SUFFIX ".txt" #define MAX_LOG_FILES 10 int main() { // 获取当前时间戳 time_t now = time(NULL); // 构造日志文件名 char log_file_name[100]; sprintf(log_file_name, "%s%ld%s", LOG_FILE_PREFIX, now, LOG_FILE_SUFFIX); // 创建新的日志文件 FILE *log_file = fopen(log_file_name, "w"); if (log_file == NULL) { printf("Failed to create log file!\n"); exit(1); } // 关闭日志文件 fclose(log_file); // 获取日志文件列表 struct stat st; char cmd[100]; sprintf(cmd, "ls %s*%s | sort -n", LOG_FILE_PREFIX, LOG_FILE_SUFFIX); FILE *fp = popen(cmd, "r"); if (fp == NULL) { printf("Failed to execute command!\n"); exit(1); } // 读取日志文件列表 char log_files[MAX_LOG_FILES][100]; int i = 0; while (fgets(log_files[i], 100, fp) != NULL) { // 去掉换行符 log_files[i][strlen(log_files[i]) - 1] = '\0'; // 记录文件信息 stat(log_files[i], &st); time_t file_time = st.st_mtime; // 如果文件是最先创建的,就删除它 if (i >= MAX_LOG_FILES - 1) { remove(log_files[0]); for (int j = 0; j < i - 1; j++) { strcpy(log_files[j], log_files[j + 1]); } i--; } // 插入新的文件 if (now < file_time) { for (int j = i - 1; j >= 0; j--) { strcpy(log_files[j + 1], log_files[j]); } strcpy(log_files[0], log_file_name); i++; break; } i++; } // 输出日志文件列表 printf("Log files:\n"); for (int j = 0; j < i; j++) { printf("%s\n", log_files[j]); } // 关闭文件指针 pclose(fp); return 0; } ``` 这个程序会在当前目录下创建一个新的日志文件,然后列出所有以 `./log_` 开头、以 `.txt` 结尾的文件,并根据它们的创建时间戳来判断哪些文件是最先创建的。如果文件列表中的文件数超过了 `MAX_LOG_FILES`,就删除最先创建的文件。最后输出日志文件列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值