Страница 1 из 1

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

Добавлено: 2011-06-22 9:53:52
mahhur
Добрый день!

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

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

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

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

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

Добавлено: 2011-06-22 11:43:06
skeletor
Попробуй добавить в конфиг клиента

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

set link max-redial 0
set link keep-alive 20 75

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

Добавлено: 2011-06-22 11:47:01
mahhur
такие строчки с такими же значениями в конфиге mpd есть, он делает несклько десятков попыток, и бывает отрабатывает нормально, а бывает что переподключения не происходит, по этому и понадобился скриптик

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

Добавлено: 2011-06-22 12:02:02
skeletor
Ну тогда приводи весь конфиг. У меня нормально переподключается.

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

Добавлено: 2011-06-22 12:12:13
mahhur
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

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

Добавлено: 2011-06-22 12:14:10
mahhur
сори, теги забыл

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

Добавлено: 2011-06-22 13:26:45
FreeBSP
у меня тоже такое бывает, лечится ручным передергиванием 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

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

Добавлено: 2011-06-22 13:57:01
mahhur
to FreeBSP

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

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

Добавлено: 2011-06-22 14:06:52
FreeBSP
раз в 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>.

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

Добавлено: 2011-06-22 14:25:07
mahhur
Большое спасибо за совет!
Буду пробовать.

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

Добавлено: 2014-03-20 14:49:52
Zeral
Каким образом добавить логирование сего действия? Или как это всё вынести в 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]~>$