Скрипт для перезапуска mdp5 через cron

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mahhur
проходил мимо

Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение mahhur » 2011-06-22 9:53:52

Добрый день!

Последнее время пров часто обрывает соединение, проблемы с оборудованием видимо.
И mpd5 не всегда его восстанавливает, когда отключения слишком продолжительны, по этому сидя на работе частенько теряю домашний сервак.

Слышал что можно дергать кроном периодически скрипт, который пинговал бы какой-нибудь адрес во внешней сети и при отсутствии пинга, делал бы реконнект pptp, но к сожалению написать такой скрипт не знаю как. В сети пока тоже ничего похожего не нашел.

Может ли кто-нибудь показать пример такого скрипта или помочь его написать?

ос: freebsd 8.1
Заранее большое спасибо.

Хостинговая компания 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/

Аватара пользователя
skeletor
майор
Сообщения: 2486
Зарегистрирован: 2007-11-16 18:22:04
Откуда: Kiev
Контактная информация:

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение skeletor » 2011-06-22 11:43:06

Попробуй добавить в конфиг клиента

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

set link max-redial 0
set link keep-alive 20 75
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"

mahhur
проходил мимо

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение mahhur » 2011-06-22 11:47:01

такие строчки с такими же значениями в конфиге mpd есть, он делает несклько десятков попыток, и бывает отрабатывает нормально, а бывает что переподключения не происходит, по этому и понадобился скриптик

Аватара пользователя
skeletor
майор
Сообщения: 2486
Зарегистрирован: 2007-11-16 18:22:04
Откуда: Kiev
Контактная информация:

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение skeletor » 2011-06-22 12:02:02

Ну тогда приводи весь конфиг. У меня нормально переподключается.
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"

mahhur
проходил мимо

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение mahhur » 2011-06-22 12:12:13

startup:

default:
load pptp_client


pptp_client:
create bundle static B1
set iface enable tcpmssfix
set iface up-script /usr/local/etc/mpd5/mpd_up.sh
set iface route default
set ipcp ranges 0.0.0.0/0 0.0.0.0/0

create link static L1 pptp
set link action bundle B1
set bundle no noretry
set auth authname xxxxxxx
set auth password xxxxxx
# set link disable magicnum
set link disable check-magic
# set link disable multilink
set link max-redial 0
set link mtu 1400
set link keep-alive 20 75
set pptp peer vpn0.giga.su
set pptp disable windowing
open


Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение FreeBSP » 2011-06-22 13:26:45

у меня тоже такое бывает, лечится ручным передергиванием mpd
виснет на

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

testbed# vidcontrol -P < /dev/ttyv1
[L1] LCP: Close event
[L1] LCP: state change Opened --> Closing
[L1] Link: Leave bundle "B1"
[B1] Bundle: Status update: up 0 links, total bandwidth 9600 bps
[B1] IPCP: Close event
[B1] IPCP: state change Stopped --> Closed
[B1] IPCP: Down event
[B1] IPCP: state change Closed --> Initial
[L1] LCP: SendTerminateReq #4
[L1] LCP: LayerDown
[L1] LCP: rec'd Terminate Ack #4 (Closing)
[L1] LCP: state change Closing --> Closed
[L1] LCP: LayerFinish
[L1] PPTP call terminated
[L1] Link: DOWN event
[L1] LCP: Down event
[L1] LCP: state change Closed --> Initial
caught fatal signal term
[B1] IFACE: Close event
[B1] IPCP: Close event
[B1] Bundle: Shutdown
[L1] Link: Shutdown
process 1716 terminated
You have new mail.
testbed#
автоматизировать передергивание mpd можно так

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

testbed# crontab -l
#minute hour    mday    month   wday    command
#
*/10     *       *       *       *       /sbin/ping -c 4 ya.ru || /usr/local/etc/rc.d/mpd5 restart 2>&1 >> /dev/null
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

mahhur
проходил мимо

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение mahhur » 2011-06-22 13:57:01

to FreeBSP

в вашем примере если соединение присутствует, cron все равно будет сессию передергивать раз в 10 мин,
или это будет происходить только при отсутствии пинга?

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение FreeBSP » 2011-06-22 14:06:52

раз в 10 минут он пингует яндекс и если пинг закончил работу со статусом отличным от нуля тогда рестартует mpd

man ping

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

EXIT STATUS
     The ping utility exits with one of the following values:

     0       At least one response was heard from the specified host.

     2       The transmission was successful but no responses were received.

     any other value
             An error occurred.  These values are defined in <sysexits.h>.
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

mahhur
проходил мимо

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение mahhur » 2011-06-22 14:25:07

Большое спасибо за совет!
Буду пробовать.

Zeral
проходил мимо
Сообщения: 4
Зарегистрирован: 2014-02-05 13:49:14

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение Zeral » 2014-03-20 14:49:52

Каким образом добавить логирование сего действия? Или как это всё вынести в sh скрипт

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

Re: Скрипт для перезапуска mdp5 через cron

Непрочитанное сообщение Гость » 2014-03-21 16:15:32

Примерно для таких нужд навелосипедил:

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

[Charlz_Klug@Meleena]~>$ cat /usr/local/etc/pinger/pinger.pl
#!/usr/bin/perl
package Pinger;
use warnings;
use strict;
use Net::Ping;
use Readonly;
Readonly my $SECONDS_IN_MINUTE => 60;
Readonly my $MINUTES_IN_HOUR => 60;
Readonly my $SITE_TIMEOUT_IN_SECONDS => 10;
Readonly my $START_HOUR => 7;
Readonly my $START_MINUTE => 35;
Readonly my $END_HOUR => 24;
Readonly my $END_MINUTE => 0;
our $VERSION = 0.1;


sub convert_time_to_seconds {
    my($hour, $minute, $seconds) = @_;
    return ($hour * $MINUTES_IN_HOUR * $SECONDS_IN_MINUTE) + ($minute * $SECONDS_IN_MINUTE) + $seconds;
}

sub p_worktime_seconds {
    my ($start_time_in_seconds, $end_time_in_seconds) = @_;
    my ($current_second, $current_minute, $current_hour) = (localtime)[0,1,2];
    my $current_time_in_seconds = convert_time_to_seconds($current_hour, $current_minute, $current_second);
    if ($current_time_in_seconds >= $start_time_in_seconds && $current_time_in_seconds <= $end_time_in_seconds) {
        return 1;
    }
    else {
        return 0;
    }
}

sub ping_host {
    my($host_name, $timeout) = @_;
    my $return_value = 0;
    my $p = Net::Ping->new('icmp');
    if ($p->ping($host_name, $timeout)) {
    $return_value = 1};
    $p->close();
    return $return_value;
}

sub ping_mail_ru {
    return ping_host('mail.ru', $SITE_TIMEOUT_IN_SECONDS);
}

sub ping_facebook_com {
    return ping_host('facebook.com', $SITE_TIMEOUT_IN_SECONDS);}

sub ping_google_com {
    return ping_host('google.com', $SITE_TIMEOUT_IN_SECONDS);
}

sub ping_youtube_com {
    return ping_host('youtube.com', $SITE_TIMEOUT_IN_SECONDS);
}

sub ping_yahoo_com {
    return ping_host('yahoo.com', $SITE_TIMEOUT_IN_SECONDS);
}

sub message_to_log {
    system '/bin/echo \"`date`: ppp restarted.\" >> /var/log/pinger.log';
    return 1;
}

sub restart_ppp {
    if (p_worktime_seconds((convert_time_to_seconds($START_HOUR, $START_MINUTE, 0)), (convert_time_to_seconds($END_HOUR, $END_MINUTE, 0)))){
        system '/usr/local/etc/PppAccountSwitch/ppptouzbhim.sh';}
    else {
        system '/usr/local/etc/PppAccountSwitch/ppptoametovii-dsl.sh';}
    return 1;
}

sub check_connect_to_internet {
    if (!(ping_mail_ru || ping_facebook_com || ping_google_com || ping_youtube_com || ping_yahoo_com)) {
        restart_ppp();
        message_to_log();
    }
    return 1;
}

check_connect_to_internet();

1;
#if (ping_host("wikipedia.ru", 60)) {
#    print "Ya.ru is alive!\n";}
#else {
#print "Site is down!\n";}

#if (worktime(0, 0, 0, 24, 0, 0)) {
#print "Worktime!\n";}
#print convert_time_to_seconds(1, 02, 02);
[Charlz_Klug@Meleena]~>$