Страница 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]~>$