需要一个服务来监控每个进程的网络流量

需要一个服务来监控每个进程的网络流量

是否有一个工具作为服务可以监控每个进程的网络流量。以便我可以使用命令行来分析使用情况?

答案1

根据您的评论,您不需要在驱动器上保存日志,并且希望在系统启动时将网络监视器作为系统服务运行。让我们这样做。

安装nethogs实用程序:

sudo apt install nethogs

在您的主目录中创建 bash 脚本(您可以用其他目录替换它),假设您的用户名是bob

touch /home/bob/nethogs.sh

使创建的脚本可执行:

chmod +x /home/bob/nethogs.sh

在文本编辑器中打开脚本并复制并粘贴其代码:

#!/bin/bash
pipe=/tmp/nethogs_pipe

trap "rm -f $pipe" EXIT

if [[ ! -p $pipe ]]; then
    mkfifo $pipe
fi
exec 3<>$pipe
nethogs -t -a >&3 2>&1

exit 0

保存更改并关闭文本编辑器。接下来创建另一个脚本来读取nethogs.sh脚本创建的命名管道:

touch /home/bob/netmon.sh

使脚本可执行:

chmod +x /home/bob/netmon.sh

复制并粘贴到netmon.sh代码中:

#!/bin/bash

pipe="/tmp/nethogs_pipe"

while true
do
    if read line; then
        echo $line
    fi
done <"$pipe"

exit 0

下一步,我们必须将nethogs.shbash 脚本转换为系统服务。在编辑器中创建/打开文件:

sudo nano /etc/systemd/system/nethogs.service

并复制/粘贴代码(替换bobExecStart您的用户名):

[Unit]
After=network.target

[Service]
ExecStart=/home/bob/nethogs.sh

[Install]
WantedBy=default.target

保存更改并关闭文件。使创建的服务在系统启动时启用:

sudo systemctl enable nethogs.service

启动nethogs服务:

sudo systemctl start nethogs.service

并检查其状态:

sudo systemctl status nethogs.service

最后cd到脚本所在的主目录netmon.sh并执行该脚本:

./netmon.sh

要退出监控请按CTRL+C。就这样。

如果要将监控数据保存到驱动器,请将脚本内容替换nethogs.sh为如下代码:

#!/bin/bash
log="/var/log/nethogs.log"
err="/var/log/nethog.err"
nethogs -t -a > $log 2> $err

exit 0

并重启服务:

sudo systemctl restart nethogs.service

通过命名管道的实时监视器将被禁用,并且脚本的输出将保存到/var/log/nethogs.log文件 - 只需使用less或打开它tail,例如:

tail -f /var/log/nethogs.log

所有错误都将保存到/var/log/nethogs.log文件中。/var/log/nethogs.log每次计算机重新启动/服务重新启动时都会清理这些错误,要禁用文件清理并启用输出附加,请nethogs.sh用另一个代码替换脚本内容:

#!/bin/bash
log="/var/log/nethogs.log"
err="/var/log/nethog.err"
nethogs -t -a >> $log 2>> $err

exit 0

评论。在 nethogs 命令选项-t-a内部脚本中,可以根据您安装的版本进行替换。在 Ubuntu 18.04 nethogs 版本中,选项-t表示tracemode,选项-alisten all interfaces

相关内容