在 bash 中执行

在 bash 中执行

我想从每个网络适配器获取 RX 和 TX,因此要从一个网络适配器获取 RX 和 TX,我使用了以下命令:

cat /proc/net/dev | grep 'wlan0' |awk  '{if ($2) print $2}' |  awk -v var="$(date +"%Y-%m-%d %r")" '{print  $1"&",var";"}' >> /opt/baran/log/baran_RX_usage_$(date +"%Y-%m-%d");
cat /proc/net/dev | grep 'wlan0' |awk  '{if ($10) print $10}' |  awk -v var="$(date +"%Y-%m-%d %r")" '{print  $1"&",var";"}' >> /opt/baran/log/baran_TX_usage_$(date +"%Y-%m-%d");

如您所见,我将结果放入带有日期(每日)的文件中。我希望在 while 循环中获取每个网络适配器,而不仅仅是 wlan0,因此我们必须有一些日志文件,例如:

opt/baran/log/baran_TX_usage_wlan0_2014-01-01
opt/baran/log/baran_RX_usage_wlan0_2014-01-01
opt/baran/log/baran_TX_usage_eth0_2014-01-01
opt/baran/log/baran_RX_usage_eth0_2014-01-01
opt/baran/log/baran_TX_usage_eth1_2014-01-01
opt/baran/log/baran_RX_usage_eth1_2014-01-01
opt/baran/log/baran_TX_usage_eth2_2014-01-01
opt/baran/log/baran_RX_usage_eth2_2014-01-01
opt/baran/log/baran_TX_usage_eth3_2014-01-01
opt/baran/log/baran_RX_usage_eth3_2014-01-01

如您所见,我有一个无线适配器和 4 个 eth,并且我希望每天为它们每个生成日志文件。

谢谢

答案1

也许您可以根据 /sys/class/net/ 目录的内容来设计您的循环?

for iface in /sys/class/net/*
do 
  grep "${iface##*/}" /proc/net/dev ...
done

如果你需要排除lo接口,你可以启用扩展的 bash globs(shopt -s extglob)以允许你使用否定,或者仅将匹配限制为 eth 和 wlan 设备名称

for iface in /sys/class/net/!(lo) ...

for iface in /sys/class/net/{eth,wlan}* ...

答案2

true您可以使用作为条件来实现连续运行的循环。

while true
do
    # Insert commands here
    sleep 5 # wait for 5 seconds
done

但是,如果您希望它每天仅获取一次 TX 和 RX,或者每隔几小时获取一次,您可能需要设置一个 cron 作业。

答案3

在/etc/cron.daily中创建一个文件,并赋予其执行权限:

sudo touch /etc/cron.daily/tx-rx-counter
sudo chmod +x /etc/cron.daily/tx-rx-counter

然后编辑并粘贴:

#!/bin/bash

for iface in $(tail -n+3 /proc/net/dev | cut -d: -f1); do
    grep $iface /proc/net/dev | awk '{if ($2) print $2}'   | awk -v var="$(date +"%Y-%m-%d %r")" '{print  $1"&",var";"}' >> /opt/baran/log/baran_RX_usage_$iface_$(date +"%Y-%m-%d")
    grep $iface /proc/net/dev | awk '{if ($10) print $10}' | awk -v var="$(date +"%Y-%m-%d %r")" '{print  $1"&",var";"}' >> /opt/baran/log/baran_TX_usage_$iface_$(date +"%Y-%m-%d")
done

它将于每天早上 6:25 运行。

相关内容