linux - 为什么 tcpdump 不在后台运行?
问题描述
我通过 ssh 登录了一个虚拟机,并尝试在后台运行一个脚本,该脚本如下所示:
#!/bin/bash
APP_NAME=`basename $0`
CFG_FILE=$1
. $CFG_FILE #just some variables
CMD=$2
PID_FILE="$PIDS_DIR/$APP_NAME.pid"
CUR_LOG_DIR=$LOGS_RUNNING
echo $$ > $PID_FILE
#Main script code
#This script shall be called using the following syntax
# $ nohup script_name output_dir &
TIMESTAMP=`date +"%Y%m%d%H%M%S"`
CAP_INTERFACE="eth0"
/usr/sbin/tcpdump -nei $CAP_INTERFACE -s 65535 -w file_result
rm $PID_FILE
结果应该是 tcpdump 在后台运行,将命令结果重定向到 file_result。
该脚本被调用:
nohup $SCRIPT_NAME $CFG_FILE start &
它停止调用 STOP_SCRIPT:
##STOP_SCRIPT
PID_FILE="$PIDS_DIR/$APP_NAME.pid"
if [ -f $PID_FILE ]
then
PID=`cat $PID_FILE`
# send SIGTERM to kill all children of $PID
pkill -TERM -P $PID
fi
当我检查 file_result 时,运行停止脚本后,它是空的。
怎么了?我该如何解决?
我找到了这个链接:https ://it.toolbox.com/question/launching-tcpdump-processes-in-background-using-ssh-060614
作者似乎遇到了类似的问题。他们辩论比赛条件,但我并不完全理解。
解决方案
我不确定您要通过让启动脚本本身继续运行来完成什么,但我认为这是一种方法可以完成您正在尝试做的事情,即启动tcpdump
并让它继续运行不受挂断的影响nohup
. 出于说明目的,我已经稍微简化了一些事情 - 随意添加您认为合适的任何变量,例如nohup.out
输出目录TIMESTAMP
等。
脚本 #1:tcpdump_start.sh
#!/bin/sh rm -f nohup.out nohup /usr/sbin/tcpdump -ni eth0 -s 65535 -w file_result.pcap & # 将 tcpdump 的 PID 写入文件 回声$!> /var/run/tcpdump.pid
脚本 #2:tcpdump_stop.sh
#!/bin/sh 如果 [ -f /var/run/tcpdump.pid ] 然后 杀死`cat /var/run/tcpdump.pid` echo tcpdump `cat /var/run/tcpdump.pid` 被杀死。 rm -f /var/run/tcpdump.pid 别的 echo tcpdump 未运行。 菲
要启动tcpdump,只需运行tcpdump_start.sh
.
要停止以开头的tcpdumptcpdump_start.sh
实例,只需运行tcpdump_stop.sh
.
捕获的数据包将被写入file_result.pcap文件,是的,它是一个 pcap 文件,而不是文本文件,因此使用正确的文件扩展名命名它会有所帮助。tcpdump终止时,tcpdump统计信息将写入nohup.out文件。
推荐阅读
- c - 如何使用信号和共享内存在父进程和子进程之间进行通信?
- sql-server - sql命令展平具有多对多关系的2个表
- oauth-2.0 - SAML SP 登录 - 本地主机地址如何解析
- c - 普通 int 上的 stdatomic.h 函数 - 产生未定义或实现定义的行为?
- mysql - Select time, sum and group by column also for non inserted values which are in different time used
- php - 为什么这个 PHP 页面加载这么久?
- flutter - Navigation.pop() 和 Navigation.push() 行为奇怪
- php - 在 symfony 访问控制中允许控制器操作
- javascript - 如何在同一条路线上重新加载页面时修复重新渲染组件?
- html - 如何让我的 Django 表单保存图像?