linux去掉日志中的skipping,Linux日志文件总管 logrotate

logrotate介绍

参考:https://linux.cn/article-4126-1.html

参考:https://blog.csdn.net/vicky_lxw/article/details/58594400

日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。

默认会安装如没有安装则使用 yum install logrotate crontabs 安装

命令参数

-d, --debug模式, 隐含-v,不会对日志文件做实际操作

-f, --force 强制轮转日志

-m, --mail 邮寄日志时使用的命令

-s, --state 指定另一个state文件

-v, --verbose 详细信息

--usage 打印帮助

配置文件参数

monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。

rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。

compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。

delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。

missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。

notifempty: 如果日志文件为空,轮循不会进行。

create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。

postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。

实战

因为我们的日志已经被elk采集走了,所以本地的日志就没有必要保留一个月,而且会触发zabbix空间报警,所以修改日志处理策略

[root@baiyongjie logrotate.d]# ls /var/log/

anaconda boot.log-20191015 cron-20190930 journal messages-20190922 php-fpm secure-20191013 tuned yum.log

audit boot.log-20191016 cron-20191006 lastlog messages-20190930 redis spooler vsftpd yum.log-20190101

boot.log btmp cron-20191013 maillog messages-20191006 rhsm spooler-20190922 wtmp

boot.log-20191010 btmp-20191001 dmesg maillog-20190922 messages-20191013 sa spooler-20190930 xferlog

boot.log-20191011 chrony dmesg.old maillog-20190930 multi-nic-util secure spooler-20191006 xferlog-20190922

boot.log-20191012 cloud-init.log ecs_network_optimization.log maillog-20191006 mysqld.log secure-20190922 spooler-20191013 xferlog-20190930

boot.log-20191013 cron grubby maillog-20191013 ntp.log secure-20190930 squid xferlog-20191006

boot.log-20191014 cron-20190922 grubby_prune_debug messages ntpstats secure-20191006 tallylog xferlog-20191013

修改配置文件

因为是测试环境我直接修改的是全局的配置文件,生产环境应该修改/etc/logrotate.d/目录下的对应文件

$ cp /etc/logrotate.conf{,.bak}

#修改后对比

$ diff /etc/logrotate.conf{,.bak}

6c6

< rotate 2 #保留2周

---

> rotate 4

15,16c15

< compress #开启历史日志压缩

< delaycompress #指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。

---

> #compress

执行logrotate

$ logrotate -fv /etc/logrotate.conf

reading config file /etc/logrotate.conf

including /etc/logrotate.d

reading config file bootlog

reading config file chrony

reading config file mysql

reading config file php-fpm

reading config file redis

......

removing /var/log/secure-20190922.gz

removing old log /var/log/secure-20190922.gz

removing /var/log/secure-20190930.gz

removing old log /var/log/secure-20190930.gz

removing /var/log/secure-20191006.gz

removing old log /var/log/secure-20191006.gz

......

compressing log with: /bin/gzip

removing /var/log/btmp-20191001.gz

removing old log /var/log/btmp-20191001.gz

destination /var/log/btmp-20191016 already exists, skipping rotation

[root@baiyongjie ~]# ls /var/log/

anaconda boot.log-20191014.gz cron grubby_prune_debug messages-20191013.gz redis spooler-20191013.gz wtmp-20191016.gz

audit boot.log-20191015.gz cron-20191013.gz journal messages-20191016.gz rhsm spooler-20191016.gz xferlog

boot.log boot.log-20191016.gz cron-20191016.gz lastlog multi-nic-util sa squid xferlog-20191013

boot.log-20191010.gz btmp dmesg maillog mysqld.log secure tallylog xferlog-20191016

boot.log-20191011.gz btmp-20191016.gz dmesg.old maillog-20191013.gz ntp.log secure-20191013.gz tuned yum.log

boot.log-20191012.gz chrony ecs_network_optimization.log maillog-20191016.gz ntpstats secure-20191016.gz vsftpd yum.log-20190101

boot.log-20191013.gz cloud-init.log grubby messages php-fpm spooler wtmp yum.log-20191016.gz

线上示例

# cat /etc/logrotate.d/syslog

/var/log/cron

/var/log/maillog

/var/log/messages

/var/log/secure

/var/log/spooler

{

compress

delaycompress

daily

missingok

sharedscripts

postrotate

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

endscript

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Linux系统排队执行VASP计算任务的Shell脚本: ```bash #!/bin/bash # 定义VASP计算程序路径和输入文件名 VASP_PATH=/path/to/vasp INPUT_FILE=INCAR # 定义任务目录和任务列表文件名 TASK_DIR=/path/to/tasks TASK_LIST=tasks.txt # 定义并创建结果目录 RESULT_DIR=/path/to/results mkdir -p $RESULT_DIR # 循环处理任务列表的任务 while read -r task; do # 进入任务目录 cd $TASK_DIR/$task # 判断是否存在输入文件 if [ ! -f $INPUT_FILE ]; then echo "Error: $INPUT_FILE not found in $TASK_DIR/$task" continue fi # 判断是否已经执行过该任务 if [ -f $RESULT_DIR/$task.out ]; then echo "Warning: $task already executed, skipping" continue fi # 执行VASP计算程序 echo "Starting calculation for $task" $VASP_PATH > $RESULT_DIR/$task.out # 判断计算是否成功 if [ $? -eq 0 ]; then echo "Calculation for $task successful" else echo "Error: Calculation for $task failed" fi done < $TASK_LIST ``` 以上Shell脚本首先定义了VASP计算程序路径和输入文件名,然后定义任务目录和任务列表文件名,以及结果目录。接下来,它循环遍历任务列表的任务,并进入任务目录进行计算。在计算之前,它会检查输入文件是否存在,并且检查结果目录是否已经存在该任务的输出文件。如果计算成功,它将输出"Calculation for $task successful",否则输出"Error: Calculation for $task failed"。最终,它将任务的输出保存到结果目录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值