User Tools

Site Tools


qnote:bash

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
qnote:bash [2017/08/01 23:33] – [Послать статистику работы Exim на почту] kqnote:bash [2022/08/10 14:44] (current) – [Записать результат mtr-теста в файл] k
Line 332: Line 332:
  
 ===== Примеры скриптов на bash ===== ===== Примеры скриптов на bash =====
 +
 +==== Показать текущие pps и bps на интерфейсе  ====
 +
 +Честно подсмотрел у [[https://gist.github.com/joemiller/4069513#file-netspeed-sh|joemiller]].
 +
 +=== pps ===
 +<code bash pps.sh>
 +#!/bin/bash
 + 
 +INTERVAL="1"  # update interval in seconds
 + 
 +if [ -z "$1" ]; then
 +        echo
 +        echo usage: $0 [network-interface]
 +        echo
 +        echo e.g. $0 eth0
 +        echo
 +        echo shows packets-per-second
 +        exit
 +fi
 + 
 +IF=$1
 + 
 +while true
 +do
 +        R1=`cat /sys/class/net/$1/statistics/rx_packets`
 +        T1=`cat /sys/class/net/$1/statistics/tx_packets`
 +        sleep $INTERVAL
 +        R2=`cat /sys/class/net/$1/statistics/rx_packets`
 +        T2=`cat /sys/class/net/$1/statistics/tx_packets`
 +        TXPPS=`expr $T2 - $T1`
 +        RXPPS=`expr $R2 - $R1`
 +        echo "TX $1: $TXPPS pkts/s RX $1: $RXPPS pkts/s"
 +done
 +</code>
 +
 +=== bps ===
 +<code bash bps.sh>
 +#!/bin/bash
 +
 + 
 +if [ -z "$1" ]; then
 +        echo
 +        echo usage: $0 network-interface
 +        echo
 +        echo e.g. $0 eth0
 +        echo
 +        exit
 +fi
 +
 +IF=$1
 +
 +while true
 +do
 +        R1=`cat /sys/class/net/$1/statistics/rx_bytes`
 +        T1=`cat /sys/class/net/$1/statistics/tx_bytes`
 +        sleep 1
 +        R2=`cat /sys/class/net/$1/statistics/rx_bytes`
 +        T2=`cat /sys/class/net/$1/statistics/tx_bytes`
 +        TBPS=`expr $T2 - $T1`
 +        RBPS=`expr $R2 - $R1`
 +        TKBPS=`expr $TBPS / 1024`
 +        RKBPS=`expr $RBPS / 1024`
 +        echo "tx $1: $TKBPS kb/s rx $1: $RKBPS kb/s"
 +done
 +</code>
 +
 +
 +---- 
 +
  
 ==== Бэкап linux сервера через rsync и список файлов отправить на почту ==== ==== Бэкап linux сервера через rsync и список файлов отправить на почту ====
-<code bash>+<code bash save_san.sh>
 #!/bin/bash #!/bin/bash
 ### ###
Line 369: Line 439:
  
 ==== Локально бекапим linux сервер через rsync ==== ==== Локально бекапим linux сервер через rsync ====
-<code bash>+<code bash copy_noc1.sh>
 #!/bin/bash #!/bin/bash
 #backup noc1 to noc1. #backup noc1 to noc1.
Line 387: Line 457:
 mysqldump -u USERNAME -pPASSWORD viewvc_db > /backup/noc1/mysql/viewvc_db_$CDATE.sql mysqldump -u USERNAME -pPASSWORD viewvc_db > /backup/noc1/mysql/viewvc_db_$CDATE.sql
 </code> </code>
-==== Заархивация данные и скопировать их на FTPS сервер ====+==== Заархивировать данные и скопировать их на FTPS сервер ====
  
-<code bash>+<code bash external_backup.sh>
 #!/bin/bash #!/bin/bash
  
Line 417: Line 487:
 ==== Заархивировать netflow данные ==== ==== Заархивировать netflow данные ====
  
-<code bash>+<code bash tar-backup-netflow-data.sh>
 #!/bin/bash #!/bin/bash
  
Line 502: Line 572:
 fi fi
 </code> </code>
 +
 +Скрипт bash tar-backup-netflow-data-via-ssh.sh позволяет сразу скопировать архив на удаленный сервер по ssh. \\
 +Это полезно когда на локальном сервере мало место и некуда записать архив. \\ 
 +Перед запуском скрипта на 1.2.3.4 надо скопиловать ssh ключ3, что бы заходить под пользователем username без пароля.
 +
 +<code bash tar-backup-netflow-data-via-ssh.sh>
 +#!/bin/bash
 +
 +# Задаем базовые и стартовые значения переменных.
 +BASE_NFSEN_BACKUP_DATA_DIR=/data/nfsen_1_3_8_bup/profiles-data/live
 +BASE_TAR_DIR=/backup/nfsen_bup
 +ROUTER=START-ROUTER
 +YEAR=START-YEAR
 +MONTH=START-MONTH
 +
 +# Выводим имена директорий в виде списка которые будут использоваться в цикле архивирования всех месяцев (MONTH=ALL) 
 +LIST_ONLY_FOLDER_NAME () {
 +find $BASE_NFSEN_BACKUP_DATA_DIR/$ROUTER/$YEAR -maxdepth 1 -mindepth 1 -type d -printf '%f\n'
 +}
 +
 +# Формируем справку.
 +SHOW_HELP () {
 +  echo "Скрипт $0 предназначен для архивирования netflow данных которые были скописрованы с сервера flow1."
 +  echo "Данные сворачиваются в архив вида nfcapd-ciso1-201702.tar.bz2."
 +  echo "Скрипту обзательно надо дать три ключа: \"-r\", \"-y\", \"-m\"."
 +  echo "Ключ \"-r\" задает роутер, данные которого будут архивироваться."
 +  echo "Ключ \"-y\" указывает на год за который надо будет брать данные."
 +  echo "Ключ \"-m\" указывает на месяц за который надо брать данне для добавления в архив."
 +  echo "Ключ \"-m\" может иметь два значния - конкретный номер месяца (01, 02 и так до 12) или ALL (будут перебираться все месяцы в выбранном годе)."
 +  echo "Пример: \"$0 -r cisco6 -y 2015 -m {03|ALL}\"."
 +}
 +
 +# Проверям наличие аргументов у скрипта.                  
 +if [ $# -eq "0" ];  # Количество переданных скрипту агрументов ($#) равно нулю (значение NO_ARGS)?
 +then
 +   echo "!!!"
 +   echo "Ошибка: Скрипт запускается без ключей и аргументов."
 +   echo "!!!"
 +   SHOW_HELP       # Если да, то показать справку
 +   exit        # и выйти 
 +fi
 +
 +#Работа с ключами. 
 +while  getopts "r:y:m:" option # Определяем ключи и говорим, что после ключа обязательно должен быть аргумент.
 +do
 +  case $option in
 +    r) ROUTER=$OPTARG;; # Присваеваем переменной значение аргумента
 +    y) YEAR=$OPTARG;;
 +    m) MONTH=$OPTARG;;
 +    *) echo "Выбран недопустимый ключ." # Если введен ключ который мы ранее не определили, то выводим сообщение
 +    exit;; # и выходим
 +  esac
 +done
 +
 +
 +
 +# Проверяем, что скрипту были переданы три ключа с аргументами. 
 +# Если значение переменной совпадает со стартовым значением, значит ключ не был задан. 
 +if [ "$ROUTER" = "START-ROUTER" ]; 
 +then
 + echo "!!!"
 + echo "Ошибка: Не задан ключ \"-r\"."
 + echo "!!!"
 + SHOW_HELP
 + exit
 +elif [ "$YEAR" = "START-YEAR" ];
 +then
 + echo "!!!"
 + echo "Ошибка: Не задан ключ \"-y\"."
 + echo "!!!"
 + SHOW_HELP
 + exit  
 +elif [ "$MONTH" = "START-MONTH" ];
 +then
 + echo "!!!"
 + echo "Ошибка: Не задан ключ \"-m\"."
 + echo "!!!"
 + SHOW_HELP
 + exit
 +elif [ "$MONTH" = "ALL" ]; # Запускаем цикл если с ключем было передано ALL.
 +# Будет создано столько архивов, сколько месячных папок выдаст команда LIST_ONLY_FOLDER_NAME.
 +then 
 + for MONTH in `LIST_ONLY_FOLDER_NAME`
 + do
 + tar -cjvf - -C $BASE_NFSEN_BACKUP_DATA_DIR $ROUTER/$YEAR/$MONTH | ssh root@1.2.3.4 "cat > $BASE_TAR_DIR/nfcapd-$ROUTER-$YEAR$MONTH.tar.bz2"
 + done
 +else # Если с ключем -m был передан конкретный номер месяца, то делаем один архив. 
 + tar -cjvf - -C $BASE_NFSEN_BACKUP_DATA_DIR $ROUTER/$YEAR/$MONTH | ssh username@1.2.3.4 "cat > $BASE_TAR_DIR/nfcapd-$ROUTER-$YEAR$MONTH.tar.bz2"
 +fi
 +</code>
 +
 +
  
 ---- ----
Line 507: Line 669:
 ==== Потереть данные на диске или флешке ==== ==== Потереть данные на диске или флешке ====
  
-[root@aee2 bin]# ./clear-some-important-data.sh /dev/sdb1 1 +<code bash clear-some-important-data.sh>
- +
-<code bash>+
 #!/bin/bash #!/bin/bash
 for n in 'seq $2' for n in 'seq $2'
Line 517: Line 677:
 </code> </code>
  
-Пример - трем раздел /dev/sdb1 ($1) одним проходом ($2).\\ +Пример - затираем раздел /dev/sdb1 ($1) одним проходом ($2).\\ 
 В случае паранойи количество проходом ставим 7.   В случае паранойи количество проходом ставим 7.  
 <code> <code>
Line 545: Line 705:
 # #
 mailx -r root@${serv_name} -s "Exim stats for ${date_minus_1day} from ${serv_name_short}" a@b.com < ${log_file} mailx -r root@${serv_name} -s "Exim stats for ${date_minus_1day} from ${serv_name_short}" a@b.com < ${log_file}
 +</code>
 +
 +----
 +
 +==== Переместить логи nginx старше 2 дней и удалить логи старше 60 дней ====
 +
 +<code bash move_and_delete_old_nginx_logs.sh>
 +#!/bin/bash
 +
 +find /var/log/nginx/ -maxdepth 0 -type f -mtime +2 -exec mv '{}' /var/log/nginx/1_archive_nginx_logs/ \;
 +find /var/log/nginx/1_archive_nginx_logs/ -type f -mtime +60 -delete
 </code> </code>
  
Line 577: Line 748:
 host $url | head -n 1 host $url | head -n 1
 host www.$url | head -n 1 host www.$url | head -n 1
 +</code>
 +
 +----
 +
 +==== Записать результат mtr-теста в файл ====
 +
 +**Версия для Cenots6**
 +<code bash mtr_test.sh>
 +#!/bin/bash
 +
 +log_file="/var/log/obkt/mtr/mtr_xxx_$1.log"
 +
 +echo "#####################" >> $log_file
 +echo -e "Start time: $(date +"%Y%m%d - %H:%M:%S")" >> $log_file 
 +echo -e "Test address: $1\n" >> $log_file 
 +
 +mtr -o LSR -4 -r -n -c $2 $1 >> $log_file
 +
 +echo -e "\nStop time: $(date +"%Y%m%d - %H:%M:%S")" >> $log_file 
 +echo -e "#####################\n" >> $log_file
 +
 +</code>
 +
 +Результат работы:
 +<code>
 +#####################
 +Start time: 20220810 - 00:41:09
 +Test address: 77.233.186.43
 +
 +HOST: xxx.xxx.pro         Loss%   Snt   Rcv   Avg  Best  Wrst StDev
 +  1. 172.20.1.2                   83.3%   300    50   0.2   0.1   0.5   0.1
 +  2. ???                          100.0   300       0.0   0.0   0.0   0.0
 +  3. 87.245.233.89                 0.0%   300   300  10.1   1.1  51.5   9.1
 +  4. 87.245.229.187                0.0%   300   300   2.4   2.2   2.9   0.2
 +  5. ???                          100.0   300       0.0   0.0   0.0   0.0
 +  6. 188.170.165.123               0.0%   300   300  31.9  31.7  34.4   0.2
 +  7. 86.109.222.224                0.0%   300   300  31.3  30.7 138.0   6.7
 +  8. 77.233.186.43                 0.0%   300   300  40.5  37.3  46.7   1.6
 +
 +Stop time: 20220810 - 00:46:09
 +#####################
 +</code>
 +
 +**Версия для Cenots7/Debian11/Ubuntu**
 +<code bash mtr_test.sh>
 +#!/bin/bash
 +
 +log_file="/var/log/obkt/mtr/mtr_noc19_$1.log"
 +
 +echo "#####################" >> $log_file
 +echo -e "Start time: $(date +"%Y%m%d - %H:%M:%S")" >> $log_file 
 +echo -e "Test address: $1\n" >> $log_file 
 +
 +mtr -z -o LSR -b -w -c $2 $1 >> $log_file
 +
 +echo -e "\nStop time: $(date +"%Y%m%d - %H:%M:%S")" >> $log_file 
 +echo -e "#####################\n" >> $log_file
 +</code>
 +
 +Результат работы:
 +
 +<code>
 +#####################
 +Start time: 20220810 - 03:51:17
 +Test address: 109.73.46.180
 +
 +Start: Wed Aug 10 03:51:17 2022
 +HOST: noc19                                                            Loss%   Snt   Rcv   Avg  Best  Wrst StDev
 +  1. AS49505 84.38.180.253                                              0.0%   300   300   7.5   0.4 135.8  13.8
 +  2. AS49505 92.53.93.89                                                0.0%   300   300   7.5   1.0 159.9  15.1
 +  3. AS29076 ae0-3002.rt2.spb.cloud-ix.net (31.28.18.102)               0.0%   300   300   6.4   0.9 149.5  14.5
 +  4. AS???   ???                                                       100.0   300       0.0   0.0   0.0   0.0
 +  5. AS29076 mastertel.msk.cloud-ix.net (31.28.19.122)                  0.0%   300   300  15.4   9.9 168.5  16.2
 +  6. AS29226 217-67-176-250.in-addr.mastertelecom.ru (217.67.176.250)   0.0%   300   300  33.4  11.6 446.6  40.8
 +  7. AS29226 109-73-46-177.in-addr.mastertelecom.ru (109.73.46.177)     0.0%   300   300  20.7  12.2 174.5  19.2
 +  8. AS29226 mail.frecom.ru (109.73.46.180)                             0.0%   300   300  16.4  11.6 169.2  12.4
 +
 +Stop time: 20220810 - 03:56:27
 +#####################
 </code> </code>
qnote/bash.1501619629.txt.gz · Last modified: (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki