Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Интересный скпипт  (Прочитано 840 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн poseydon_2003

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Интересный скпипт
« : 25 Июня 2013, 16:03:05 »
Добрый день всем!

Помогите, плиз, сам не могу справится, голова уже закипает...

Итого, вопрос такой:
Нужно, чтобы скрипт открывал файл с логами, искал там определённую строку, и, если, такая строка существует, чтобы скрипт пинговал определённый домен и результат записывал в другой файл.
Вот мои наработки:

#!/bin/bash

TIME=DATE[%b %d %h:%M:]
PATTERN="["$TIME"..] chan_sip.c: Peer 'SipVoipUa' is now UNREACHABLE"
RESULT= grep $PATTERN /var/log/asterisk/full
if ($RESULT); then
        STR=DATE[%b %d %T]" pinging pip2.voip.ua: "
        echo $STR >> /var/ping_sip.txt
        ping sip2.voip.ua >> /var/ping_sip.txt
        echo "/n" >> /var/ping_sip.txt
fi

Вылетает вот такое:

/var/pings.txt: line 7: fg: no job control

В файл ничего не пишет, на екране пролетает весь файл лога...
Что и где не так?
« Последнее редактирование: 25 Июня 2013, 16:09:10 от poseydon_2003 »

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6272
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #1 : 25 Июня 2013, 16:16:14 »
что за файл /var/pings.txt? В тексте скрипта есть только /var/ping_sip.txt

Оффлайн poseydon_2003

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #2 : 25 Июня 2013, 16:23:11 »
Это и есть выполняемый скрипт...

Тоесть при выполнении sudo /var/pings.txt и вылетают ошибки

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #3 : 25 Июня 2013, 16:29:41 »
poseydon_2003, проще написать скрипт по-человечески...

Оффлайн poseydon_2003

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #4 : 25 Июня 2013, 16:43:11 »
peregrine, а могли бы подказать, как?

Дело в том, что я фактически новичок в администрировании nix'ов, но в веб-программировании я разбираюсь очень даже неплохо... НО! Веб-программирование и bash-скрипты - очень разные вещи.

Сможет ли хоть кто нибудь подсказать, где у меня ошибка и почему у меня этот скрипт написан через ...... ну, вы поняли )))

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Интересный скпипт
« Ответ #5 : 25 Июня 2013, 20:44:06 »

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #6 : 25 Июня 2013, 21:30:50 »
poseydon_2003, поставьте тех задачу подробнее и на понятном языке.

Оффлайн obgorelyi

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #7 : 25 Июня 2013, 21:42:27 »
Вообще задача простая, если воспользоваться grep.
Я бы сделал это так:
#!/bin/bash
# Ищем регулярное выражение (гугль в помощь, чтобы понять, как их составлять),
# в примере я искал слово начинающееся на "с"и заканчивающееся на "ю".
if grep -a " с.*ю " test.txt
then
    echo "Всем привет!" > res.txt # это заменяем на любую команду, какую хотим
fi
Недостаток, grep в консоль выводит, то что нашел (точнее всю строку, с тем что нашел), мне просто лень сейчас мануал читать, чтобы вывод подавить. Можно sed'ом отрезать ненужное, присоединить нужное и на вывод подать, на что фантазия богата.
« Последнее редактирование: 25 Июня 2013, 21:46:57 от obgorelyi »

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1293
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #8 : 25 Июня 2013, 21:46:07 »
#!/bin/bash

log='/var/ping_sip.txt'
asterisk_log='/var/log/asterisk/full'

PATTERN="\["`date +"%b %d %H:%M"`":..\] chan_sip.c: Peer 'SipVoipUa' is now UNREACHABLE"
if [ `grep -c "$PATTERN" "$asterisk_log"` -ne 0 ]; then
        echo `date +"%b %d %T"`" pinging pip2.voip.ua: " >> "$log"
        ping -c3 sip2.voip.ua >> "$log"
        echo >> "$log"
fi
Хотя я не уверен что Астериск использует тот формат дат, который у вас.

Оффлайн obgorelyi

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #9 : 25 Июня 2013, 21:53:01 »
Позвольте глупый вопрос, а зачем "-ne 0" в этой строчке?
if [ `grep -c "$PATTERN" "$asterisk_log"` -ne 0 ]
grep же сам вроде False вернет, если ничего не нароет или я ошибаюсь?

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1293
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #10 : 25 Июня 2013, 22:03:58 »
"grep -c" - выводит кол-во совпадений
"-ne 0" - неравно 0

Строка "RESULT= grep $PATTERN /var/log/asterisk/full" не будет работать
В таком виде "RESULT=`grep $PATTERN /var/log/asterisk/full`" вывод grep отправится в PATTERN, а это все строки в которых обнаружено совпадение.
"if ($RESULT)" - это вообще из какого-то другого языка. И, насколько я знаю bash, в нем нет boolean-переменных.

Оффлайн obgorelyi

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Интересный скпипт
« Ответ #11 : 25 Июня 2013, 23:00:55 »
Vitsliputsli, спасибо за разъяснения. :)

 

Страница сгенерирована за 0.118 секунд. Запросов: 25.