Linux 如何安排tcpdump在特定时间段内运行?

Linux 如何安排tcpdump在特定时间段内运行?,linux,tcpdump,Linux,Tcpdump,每次手动运行tcpdump时,我都必须使用Ctrl+C来停止它。现在我想用cronjob安排我的tcpdump,我只需要它运行1个半小时。如果不手动运行Ctrl+C或kill命令,如何自动停止?下面是我正在测试的命令: tcpdump -i eth0 'port 8080' -w myfile 我可以安排另一个cronjob来终止tcpdump进程,但这似乎不是一个好主意 您可以组合-G{sec}(每x秒旋转一次转储文件)和-W{count}(限制转储文件)以获得所需内容: tcpdump

每次手动运行
tcpdump
时,我都必须使用Ctrl+C来停止它。现在我想用cronjob安排我的
tcpdump
,我只需要它运行1个半小时。如果不手动运行Ctrl+C或kill命令,如何自动停止?下面是我正在测试的命令:

tcpdump -i eth0 'port 8080' -w  myfile

我可以安排另一个cronjob来终止
tcpdump
进程,但这似乎不是一个好主意

您可以组合
-G{sec}
(每x秒旋转一次转储文件)和
-W{count}
(限制转储文件)以获得所需内容:

tcpdump -G 15 -W 1 -w myfile -i eth0 'port 8080'

将运行15秒,然后停止。将1.5小时变为秒,它应该可以工作。

您可以这样做:

tcpdump -i eth0 'port 8080' -w  myfile & 
pid=$!
sleep 1.5h
kill $pid

在Ubuntu 14.04上最适合我的方法

sudo -i
crontab -e
然后添加行

30 17 * * * /usr/sbin/tcpdump -G 12600 -W 1 -s 3000 -w /home/ubuntu/capture-file.pcap port 5060 or portrange 10000-35000
注释

  • -G标志指示转储运行的秒数,此示例每天从下午5:30到晚上9:00运行
  • -W是tcpdump将执行的迭代次数
  • 在保存并退出文件之前,不会添加Cron作业
  • 此示例用于捕获星号电话服务器的数据包
    • 您可以使用timeout

      timeout 5400 tcpdump -i eth0 'port 8080' -w myfile
      
      你可以用

      watch tcpdump -i eth0 'port 8080' -w  myfile
      

      这将每2秒运行一次。

      tcpdump的任一答案;适用于任何程序(除非他们摆弄SIGALRM)的解决方案是注意:如果您没有收到任何流量,此技巧不起作用。是的,tcpdump在收到数据包之前不会旋转、关闭或以其他方式执行任何操作。用法:
      -w myfile-%Y-%m-%d\u%H.%m.%S
      。使用
      -w myfile
      ,tcpdump将在指定的秒数后继续覆盖同一文件。您必须提供一个文件名,其时间格式由
      strftime
      指定,以避免覆盖。如果您只有一个tcpdump实例,您可以使用
      pkill tcpdump
      这看起来更简单、更高效。
      timeout 90m
      看起来更简单。这一个更安全,因为
      tcpdump-G
      将在该接口没有流量争用的情况下无限期运行。这对我很有效!