我需要一些脚本/命令/ 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份 compress以节省磁盘空间。 您可以使用zless或zgrep来查看它们。 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。