0

我正在尝试在接口 wlan0 上启动 tshark 进程捕获 5 分钟。正如在其他线程中读到的,我试图将输出定向到这样的文件:

$log = "sniff-".date("Y-m-d-H-i-s").".txt";
system("sudo tshark -i wlan0 -a duration:300 > /var/www/log".$log);

我期待网络服务器启动 tshark 进程并继续前进。在apache的错误日志中可以看到tshark的正常输出:

Running as user "root" and group "root". This could be dangerous
Capturing on wlan0
6 packets captured

为了让 tshark 输出到这个日志文件并且不中断 php 脚本,我需要改变什么?a & 是否足够,如果是,我必须把它放在哪里?

解决方案:

system("sudo tshark -i wlan0 -a duration:300 > /var/www/log".$log." &");
4

2 回答 2

1

通过将 & 放在 bash cmd 的末尾,它应该将其与正在运行的会话断开连接,但您可以尝试使用 PHP 线程或 PHP fork 将进程作为并行进程运行,前提是您的服务器已安装相关设置和模块启用此功能。

system("sudo tshark -i wlan0 -a duration:300 &> /var/www/log".$log.' &');

此外,通过添加 &> 作为重定向模式,它会将 STDOUT 和 STDERR 流重定向到日志文件。您看到的消息可能来自 STDERR,并且可能不会出现在您的日志文件中。

于 2013-05-18T15:49:38.913 回答
0

当我解释日志时,尽管有警告,该过程确实有效并捕获了数据包。但是当 php 脚本完成时,您的进程终止了。尝试使用

sudo nohup tshark -i wlan0 ...
于 2013-05-18T15:49:53.827 回答