делать, пока в 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
задан 5 April 2014 в 22:23

3 ответа

Возможно, Вы могли основывать свой цикл на содержании/sys/class/net/каталога?

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

, Если необходимо исключить эти lo интерфейс, Вы могли бы или позволить расширенным шарикам удара (shopt -s extglob) позволить Вам использовать отрицание, или просто ограничить соответствия eth и wlan именами устройств

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

for iface in /sys/class/net/{eth,wlan}* ...
0
ответ дан 5 April 2014 в 22:23

У Вас может быть непрерывно рабочий цикл при помощи true как условие.

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

Однако, если Вы хотите, чтобы он получил TX и RX только однажды в день, или один раз в несколько часов, Вы могли бы хотеть настроить задание крона вместо этого.

0
ответ дан 5 April 2014 в 22:23

Создайте файл в/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.

0
ответ дан 5 April 2014 в 22:23

Другие вопросы по тегам:

Похожие вопросы: