尝试为此运行一个bash脚本,因为我想将它放入cron并每晚运行以从文件中提取错误并写入同一目录中的文件:
我的剧本只是悬而未决:
#!/bin/bash
tail -f /var/log/syslog | grep -i "error" > /var/log/syserrorlog.log
当这个运行时我想写这个/更新同一个文件而不是覆盖它。
答案 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/
中有配置文件。你可以在那里添加你的命令。