redirect输出和日志旋转

我需要一些脚本/命令/ cronjob帮助..

我需要将tcpdump命令的输出redirect到日志文件,并且每天保留1个日志文件。 我知道我可以使用tcpdump日志语法,但我也使用awk -F来过滤输出。 我的命令看起来像这样,运行本身的作品美丽。

tcpdump -ieth0 -p "tcp[tcpflags] & (tcp-syn) !=0" | awk -F 'Flags' '{print $1}' > /var/log/tcpdump.log

我怎样才能使它每天旋转文件? 有没有办法与shell脚本(我的shell脚本知识是非常有限的)。

如果你不擅长shell脚本,我不会尝试写你自己的日志轮换。 这听起来并不像你在这里有任何需要使用logrotate而不是通过滚动你自己的方式来处理。 你可以做一个简单的configuration文件

 # /etc/logrotate.d/tcpdump "/var/log/tcpdump.log" { daily rotate 30 compress prerotate killall your_dump_script endscript postrotate your_dump_script & endscript } 

这会:

  • daily旋转你的文件
  • 由于您不想填满您的驱动器,请保留30
  • 使用gzip compress以节省磁盘空间。 您可以使用zlesszgrep来查看它们。
  • 在旋转之前杀掉your_dump_script ,然后重新启动它。 随意将其重命名为更多您喜欢的东西。

如果你把它放在/etc/logrotate.d这个应该会被内置的cron作业拾取,但是如果你想手动运行它来validation它的工作:

 logrotate /etc/logrotate.d/tcpdump 

或者把configuration放在不同的位置,并从你的脚本中运行它。 无论哪种方式,你写的代码less,事情更可能工作可靠。

我这个周末写了一个logrotee 。 如果我已经阅读@ JdeBP 有关multilog的很好的答案,我可能不会这么做。

我专注于它是轻量级的,并能够bzip2它的输出块像:

 verbosecommand | logrotee \ --compress "bzip2 {}" --compress-suffix .bz2 \ /var/log/verbosecommand.log 

不过,还有很多工作要做和testing。