从文件中grep错误并将它们放在新文件中但不覆盖新文件

时间:2016-06-17 15:46:35

标签: linux bash

尝试为此运行一个bash脚本,因为我想将它放入cron并每晚运行以从文件中提取错误并写入同一目录中的文件:

我的剧本只是悬而未决:

#!/bin/bash
tail -f /var/log/syslog | grep -i "error" > /var/log/syserrorlog.log

当这个运行时我想写这个/更新同一个文件而不是覆盖它。

2 个答案:

答案 0 :(得分:2)

将您的>更改为>>(后者意味着追加)。此外,tail -f将按定义挂起:它监视文件以获取新数据。

如果您的系统日志每天都在轮换,那么您只需使用

即可
#!/bin/bash
cat /var/log/syslog | grep -i "error" >> /var/log/syserrorlog.log

如果没有轮播,您可以在管道中添加grep,过滤掉相关日期

答案 1 :(得分:0)

尝试使用logrotate。这是用于定期旋转日志的守护程序(例如,存档日志文件,然后每晚清除它们)。它支持许多配置选项,其中之一是postrotate - 完成轮换后执行的自定义脚本。从logrotate的手册页复制的说明:

  

<强> postrotate / endscript

     

postrotate和endcript之间的线(两者必须单独出现在线上)在执行之后执行(使用/ bin / sh)   日志文件已旋转。这些指令可能只出现在日志中   文件定义。通常,传递日志文件的绝对路径   作为脚本的第一个参数。如果指定了sharedscripts,则为whole   pattern被传递给脚本。另见prerotate。请参阅sharedscripts   和错误处理的nosharedscripts。

Syslog也是一个标准的守护进程,所以它应该在/etc/logrotate.d/中有配置文件。你可以在那里添加你的命令。