новичек

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Spook1680
лейтенант
Сообщения: 996
Зарегистрирован: 2009-07-28 12:26:09

новичек

Непрочитанное сообщение Spook1680 » 2011-01-07 22:57:54

Можно конечно на sh написать.
Но изучаю perl вот и пытаюсь осилить
скрипт будет поднимать тунель если тот упал

Код: Выделить всё

#!/usr/bin/perl
$sock = `sockstat | grep vpnd`;                
`sleep 4`;
if ($sock) {
  ('') 
} else {
  print "'/usr/local/etc/rc.d/000.vpnd.sh start'";
}
<>;
1Вопрос. Как указать в perl что бы он полученные данныу $sock сравнил с тем что в процессах на freebsd запущены.
Если vpnd в процессах не видем. То сделать то-то.. если видем .. то ничего не делать.
"Гента вообще форкLFS в свою очередь мутант Скалвари
которая BSD с ядром Линя BSD - мутировал-AT&T UNIX
а там был UNICS - MULTICS, счёты, глиняные таблички, палочки,
большой взрыв, сингулярность, пиз...ц. Вывод: RedHat использует пиз..ц. "

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: новичек

Непрочитанное сообщение Гость » 2011-01-08 0:23:35

Вместо `sleep 4`; можно использовать встроенную в перл функцию: sleep(4);
Если vpnd в процессах не видем. То сделать то-то.. если видем .. то ничего не делать.
ps aux | grep vpnd?
Как указать в perl что бы он полученные данныу $sock сравнил с тем что в процессах на freebsd запущены.
Во-первых, возможно понадобиться не $sock, а @sock, потому что `sockstat | grep vpnd`, наверное, может вернуть несколько строк.
Во-вторых, полученные данные от sockstat и от ps aux с помощью split разбиваем на подстрочки и сравниваем нужные между собой.

Аватара пользователя
Spook1680
лейтенант
Сообщения: 996
Зарегистрирован: 2009-07-28 12:26:09

Re: новичек

Непрочитанное сообщение Spook1680 » 2011-01-08 21:38:58

Гость писал(а):Вместо `sleep 4`; можно использовать встроенную в перл функцию: sleep(4);
Если vpnd в процессах не видем. То сделать то-то.. если видем .. то ничего не делать.
ps aux | grep vpnd?
Как указать в perl что бы он полученные данныу $sock сравнил с тем что в процессах на freebsd запущены.
Во-первых, возможно понадобиться не $sock, а @sock, потому что `sockstat | grep vpnd`, наверное, может вернуть несколько строк.
Во-вторых, полученные данные от sockstat и от ps aux с помощью split разбиваем на подстрочки и сравниваем нужные между собой.
Я типа вот так пробую сделать
Но это чисто черновик))

Код: Выделить всё

#!/usr/bin/perl
@sock = `sockstat | grep vpnd`;
print @sock;
sleep (4);
@array = split(/\//,@sock);
print "@array\n";
sleep (4);
@psvpn = `ps aux | grep vpnd`;
sleep (2);
print "@psvpn\n";
sleep (2);
@arvpn = split(/\//,@psvpn);
print "@arvpn\n";
Грубо конечно (или тупо) вобщем получается у меня @array = 2 т.е. две строки выдает sockstat | grep vpnd.
Отлично. Если тунель упал то будет (естественно :crazy: ) 0
@arvpn = 1 (одна строка)

Я так понимаю
Во-вторых, полученные данные от sockstat и от ps aux с помощью split разбиваем на подстрочки и сравниваем нужные между собой
А сравнение и выполнение определенных действий. Это я так понимаю управляющая конструкция if () {....} тут надо сравнить @array и @arvpn - в зависимости от результата сделать действие??
"Гента вообще форкLFS в свою очередь мутант Скалвари
которая BSD с ядром Линя BSD - мутировал-AT&T UNIX
а там был UNICS - MULTICS, счёты, глиняные таблички, палочки,
большой взрыв, сингулярность, пиз...ц. Вывод: RedHat использует пиз..ц. "

Аватара пользователя
Spook1680
лейтенант
Сообщения: 996
Зарегистрирован: 2009-07-28 12:26:09

Re: новичек

Непрочитанное сообщение Spook1680 » 2011-01-09 12:26:36

кто может немного в теории помоч?
Почему при попытке сравнить два массива ничего не выходит.
Ведь в данном примери если условие не соблюдено то будет фаль и должен выдаваться 0 на экран
@array = 2
@arvpn = 1

Код: Выделить всё

print (@array > @arvpn);
 
"Гента вообще форкLFS в свою очередь мутант Скалвари
которая BSD с ядром Линя BSD - мутировал-AT&T UNIX
а там был UNICS - MULTICS, счёты, глиняные таблички, палочки,
большой взрыв, сингулярность, пиз...ц. Вывод: RedHat использует пиз..ц. "

Аватара пользователя
Spook1680
лейтенант
Сообщения: 996
Зарегистрирован: 2009-07-28 12:26:09

Re: новичек

Непрочитанное сообщение Spook1680 » 2011-01-09 14:18:16

Почему вот этот кусок не полностью срабатывает

Код: Выделить всё

if ($array[0] gt $arvpn[0]) {
 print "VPND rabotaet\n";
}
elsif ($array[0] lt $arvpn[0]) {
 print `/usr/local/etc/rc.d/000.vpnd.sh start`
} else {
 print `/usr/local/etc/rc.d/route.sh start`
}
Если тунель упал то сработает условие
elsif ($array[0] lt $arvpn[0])
Тунель запуститься, но вот таблица с маршрутами не запускается
else {
print `/usr/local/etc/rc.d/route.sh start`
}
"Гента вообще форкLFS в свою очередь мутант Скалвари
которая BSD с ядром Линя BSD - мутировал-AT&T UNIX
а там был UNICS - MULTICS, счёты, глиняные таблички, палочки,
большой взрыв, сингулярность, пиз...ц. Вывод: RedHat использует пиз..ц. "

Гость
проходил мимо

Re: новичек

Непрочитанное сообщение Гость » 2011-01-09 17:25:10

А сравнение и выполнение определенных действий. Это я так понимаю управляющая конструкция if () {....} тут надо сравнить @array и @arvpn - в зависимости от результата сделать действие??
до
Почему при попытке сравнить два массива ничего не выходит.
Ведь в данном примери если условие не соблюдено то будет фаль и должен выдаваться 0 на экран
@array = 2
@arvpn = 1
print (@array > @arvpn) при false ничего не выведется, а при true выведется 1. Ибо в перле false являются значения 0, '0', '', undef. В данном случае print выводит ''.
Если тунель упал то сработает условие

Код: Выделить всё

elsif ($array[0] lt $arvpn[0])
Тунель запуститься, но вот таблица с маршрутами не запускается

Код: Выделить всё

} else {
    print `/usr/local/etc/rc.d/route.sh start`
}
else ведь выполнится, если не выполнились другие два условия. Если надо, чтобы после запускалась табл. с маршрутами сразу после запуска туннеля, то уберите строчку } else {.

Аватара пользователя
Spook1680
лейтенант
Сообщения: 996
Зарегистрирован: 2009-07-28 12:26:09

Re: новичек

Непрочитанное сообщение Spook1680 » 2011-01-10 1:57:23

Гость писал(а):
А сравнение и выполнение определенных действий. Это я так понимаю управляющая конструкция if () {....} тут надо сравнить @array и @arvpn - в зависимости от результата сделать действие??
до
Почему при попытке сравнить два массива ничего не выходит.
Ведь в данном примери если условие не соблюдено то будет фаль и должен выдаваться 0 на экран
@array = 2
@arvpn = 1
print (@array > @arvpn) при false ничего не выведется, а при true выведется 1. Ибо в перле false являются значения 0, '0', '', undef. В данном случае print выводит ''.
Если тунель упал то сработает условие

Код: Выделить всё

elsif ($array[0] lt $arvpn[0])
Тунель запуститься, но вот таблица с маршрутами не запускается

Код: Выделить всё

} else {
    print `/usr/local/etc/rc.d/route.sh start`
}
else ведь выполнится, если не выполнились другие два условия. Если надо, чтобы после запускалась табл. с маршрутами сразу после запуска туннеля, то уберите строчку } else {.
Спасибо )) докумекал я про связку ..
if () {
elsif
else {
}
}
Просто как пособие использую "Изучаем Perl" Рэндал Шварц Том Феникс 5-е издание
И про elsif там вобще нет ни слова, в разделе упроваляющая конструкция if...
Да же намека нет на то, что если оно не выполняется то будет выполнено то, что указано в } else { }
Книга хорошая. ( я не коем образом не критикую)., возможно так перевели.
"Гента вообще форкLFS в свою очередь мутант Скалвари
которая BSD с ядром Линя BSD - мутировал-AT&T UNIX
а там был UNICS - MULTICS, счёты, глиняные таблички, палочки,
большой взрыв, сингулярность, пиз...ц. Вывод: RedHat использует пиз..ц. "