- Перенаправление на вход bash скрипта, allez, 08:04 , 05-Ноя-06 (1)
- Перенаправление на вход bash скрипта, Susanin_, 13:53 , 05-Ноя-06 (2)
>P. S. А вы вообще хоть что-нибудь по предмету читали или только >пиво пили да лекции >прогуливали? ;-) >Сюда вот загляните: http://gazette.linux.ru.net/rus/articles/index-abs-guide.html За ссылку спасибо. По поводу лекций - так и не было у меня программирования (10 лекций паскаля не в счет...) Можно еще вопрос: В общем виде ситуация следующая. Есть arpwatch, сидящий на многих интерфейсах сервера ( в основном на вланах). Каждый экземпляр arpwatch выдает свою инфу, иногда они дублируеться. Я написал скрипт, который обрабатывает инфу от arpwatch и пишет все в один файл. Но есть проблема, как запустить arpwatch, перенаправив все с stdout на обработку моему скрипту. Я запускаю arpwatch с параметрами: # /usr/local/sbin/arpwatch -i eth0 -p -m 2 -f /var/arpwatch/arp0.dat # Format: timestamp,delta,action,hostname,ip,mac,oldmac,vendor # actions: 0=new activity,1=new station,2=reused old mac,3=changed mac,4=dec flipflop,5=bogon,6=ether broadcast,7=ether mismatch,8=ether too short,9=ether bad format,10=ether wrong type_ip,11=ether bad length,12=ether wrong op,13=ether wrong RARP,14=ether wrong type, 1162722918,0,5,<UNKNOWN>,192.168.28.7,0:6:29:f1:13:57,0:6:29:f1:13:57,IBM 1162722918,0,5,<UNKNOWN>,192.168.28.7,0:6:29:f1:13:57,0:6:29:f1:13:57,IBM 1162722919,0,5,<UNKNOWN>,192.168.28.7,0:6:29:f1:13:57,0:6:29:f1:13:57,IBM 1162722919,0,5,<UNKNOWN>,192.168.28.7,0:6:29:f1:13:57,0:6:29:f1:13:57,IBM 1162722919,0,5,<UNKNOWN>,192.168.214.241,0:6:29:f1:13:57,0:6:29:f1:13:57,IBM 1162722919,0,5,<UNKNOWN>,192.168.214.241,0:6:29:f1:13:57,0:6:29:f1:13:57,IBM 1162722919,0,5,<UNKNOWN>,192.168.214.247,0:11:95:63:fe:d2,0:11:95:63:fe:d2,D-Link 1162722919,0,1,<UNKNOWN>,172.18.7.24,0:b:5d:72:38:34,0:0:0:0:0:0,Fujitsu Limited 1162722919,0,5,<UNKNOWN>,192.168.28.10,0:13:d4:80:29:a7,0:13:d4:80:29:a7,Asustek Computer 1162722919,0,5,<UNKNOWN>,192.168.28.10,0:13:d4:80:29:a7,0:13:d4:80:29:a7,Asustek Computer ... Вот этот вывод мне и надо направить на обработку моему скрипту. Пробовал: #/var/arpwatch/arpwatch_compare < /usr/local/sbin/arpwatch -i eth0 -p -m 2 -f /var/arpwatch/arp0.dat Record not exist. Add it [ -p - 2 - -f ] Т.е. он первый ключ оставляет для arpwatch (-i eth0) а следующий уже в скрипт переправляет. А нужно с этими параметрами запустить arpwatch и пока он будет работать, весь вывод направлять в скрипт. Пробовал: #/var/arpwatch/arpwatch_compare < `/usr/local/sbin/arpwatch -i eth0 -p -m 2 -f /var/arpwatch/arp0.dat` процесс работает, но никаких данных в скрипт не передает. Буду очень признателен, если подскажите какое-то решение :)
- Перенаправление на вход bash скрипта, allez, 20:38 , 05-Ноя-06 (3)
- Перенаправление на вход bash скрипта, Susanin_, 20:52 , 05-Ноя-06 (4)
>Покажите, пожалуйста, текст скрипта. Для большей ясности. Не вопрос: ------------------------------------------- # cat ./arpwatch_compare #!/bin/bash LOG="/var/arpwatch/arp.log" echo -----------$1 >> $LOG STRING=`echo $1 | sed 's/,/ /g'` STRING=`echo $STRING | sed 's/<//g'` STRING=`echo $STRING | sed 's/>//g'` set $STRING cur_date=`date \+\%Y_\%m_\%d_\%H_\%M` PID="/var/arpwatch/arp.pid" timestamp=$1 delta=$2 action=$3 hostnam=$4 ip=$5 mac=$6 oldmac=$7 vendor=$8 #Функция проверяет наличие файла arp.pid. Если такой есть - значит не отработал еще предыдущий вызов скрипта и нужно подождать, что бы не было дублированных записей func_check_pid () { if [ ! -f $PID ] # Проверка существования файла. #echo $1 $2 $3 $4 $5 $6 $7 $cur_date $8 $9 then func_work else echo "wait 1 second..." >> $LOG sleep 1 func_check_pid exit fi }
# В общем виде Уникальным являеться составной ключ MAC+IP. По нему и делаеться выборка, #если такой записи нет - то добавляем. #В любом случае любой результат пишем в лог и на консоль. func_work () { echo "pid" > $PID file="/var/arpwatch/arp.txt" REC_EXIST=`cat $file | awk '{if ($5 == "'$ip'" && $6 == "'$mac'") {print $1} }'` if [ "$REC_EXIST" != "" ] then echo "Record exist" [ $action - $ip - $mac ] >> $LOG echo "Record exist" [ $action - $ip - $mac ] else echo "Record not exist. Add it " [ $action - $ip - $mac ] >> $LOG echo "Record not exist. Add it " [ $action - $ip - $mac ] echo $timestamp $delta $action $hostnam $ip $mac $oldmac $cur_date $vendor >> $file fi echo -n "" # удаляем файл PID, что бы другой вызов скрипта отработал. rm $PID exit 0 } func_check_pid -------------------------------------------------------- Скрипт - черновик. Еще доделывать и оптимизировать. Но прежде хотелось запустить всю связку. В том числе и обработку входных параметров на правильность и целостность нужно добавить обязательно. Приму любые советы.
|