1 (20.01.2013 21:40:13 отредактировано Cewrio)

Не очень мне понравилось, что ppp0 при включении сервера поднимается не всегда. Последствия разрывов тоже представляются не очень то хорошими.
На сколько я понял, для решения проблемы нужен скрипт, который будет пинать xl2tpd в случае, когда тот повиснет мертвым грузом.
На просторах интернета был найден следующий вариант:

#!/usr/bin/perl -w
use File::Copy;
use Net::Ping;
use POSIX ();
my $date = POSIX::strftime('%y.%m.%d  %H.%M.%S', localtime);
my $pidfile = "/var/run/xl2tpd.pid";
my $log = "/var/log/ping.log";
my $size = (-s $log);
my $max = "1024";
open (FH1, ">> $log");
my $ip = '8.8.8.8';
my $p = Net::Ping->new( "icmp", 5, 64 );
if ( $p->ping($ip) ) {
} else {
   if( -e($pidfile) && -T _)
   {
   system   (`/etc/init.d/xl2tpd restart`);
      print FH1 "$date ping NO L2TP restart", "\n";
   }
   else
   {
   system   (`/etc/init.d/xl2tpd start`);
      print FH1 "$date ping NO L2TP start", "\n";
   }
}
close (FH1);

Может быть есть и лучше - не знаю, предложите другие.
А пока этот отправился в nano /etc/init.d/check-inet
Получил права на выполнение chmod +x /etc/init.d/check-inet
И его адрес был записан мною в nano /etc/rc.local
/etc/init.d/check-inet перед строчкой exit 0

Но на сколько я понял, /etc/rc.local одноразово выполнит скрипт при загрузке системы. Хотел бы непрерывный ход проверки, пускай интернет поднимается сам, что бы ни случилось.
Cron раз в минуту выполнит - не чаще? Ожидать после разрыва столько - не то хотелось бы.

2 (20.01.2013 21:50:24 отредактировано Kettler)

Скрипт мой. Поставьте в крон делов то.
Меня спасает.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

3

Крон пугает отсутствием возможности настроить время в секундах

4

apt-get install  libproc-daemon-perl libproc-pid-file-perl
#!/usr/bin/perl

use strict;
use warnings;

use Proc::Daemon;
use Proc::PID::File;
use Net::Ping;


my $pidfile = "/var/run/xl2tpd.pid";
my $ip = '8.8.8.8';
my $p = Net::Ping->new( "icmp", 2, 64 );

Proc::Daemon::Init();

if (Proc::PID::File->running()) {
print "Already running\n";
exit 0;
}

for (;;) {
sleep 15;
if ( $p->ping($ip) ) {
} else {
   if( -e($pidfile) && -T _) 
   {
   system   (`/etc/init.d/xl2tpd restart`);
   }
   else
   {
   system   (`/etc/init.d/xl2tpd start`);
   }
}
}

Надо проверять.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

5

То есть как мне это все организовывать?

В /etc/crontab добавляю строчку:
01 * * * * root run-parts /etc/init.d/check-inet

не забыв выставить права на выполнение:
chmod +x /etc/init.d/check-inet

скрипт запустится через минуту, но сам принудит себя выполняться через sleep 15 секунд?

6

Я ща на работе отлажу и проверю.
Стоит 1 раз запустить и всё.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

7

И как проверять? Смотреть в файле лога крона даты, частоту выполнения?

8

что проверять? Работает скрипт или нет?

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

9

Почти одновременно отправили сообщения.

Отладьте пожалуйста, этим вы мне поможете. Этот скриптовый язык я совсем не знаю.

10

Щас отлаживаю.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

11

root@marshrutizator:~# ls /var/run/ | grep 1.pl
1.pl.pid
root@marshrutizator:~# cat 1.pl
#!/usr/bin/perl
use strict;
use warnings;

use Proc::Daemon;
use Proc::PID::File;
use Net::Ping;

Proc::Daemon::Init;

if (Proc::PID::File->running()) {
print "Already running\n";
exit 0;
}

my $pidfile = "/var/run/xl2tpd.pid";
my $ip = '8.8.8.8';
my $p = Net::Ping->new( "icmp", 2, 64 );


my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };

while ($continue) {

if ( $p->ping($ip) ) {
} else {
   if( -e($pidfile) && -T _)
   {
   system   (`/etc/init.d/xl2tpd restart`);
   }
   else
   {
   system   (`/etc/init.d/xl2tpd start`);
   }
}
sleep (16);
}
root@marshrutizator:~# ls /var/run/ | grep 1.pl
1.pl.pid
root@marshrutizator:~#
Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

12

У меня xl2tpd автоматически реконнектится каждые пять секунд в случае разрыва. Причем запускаю его стандартным гентушным инит-скриптом.

Йа тьомный эльф

13

bobr пишет:

У меня xl2tpd автоматически реконнектится каждые пять секунд в случае разрыва. Причем запускаю его стандартным гентушным инит-скриптом.

Но если долгое время не отвечает впн сервер то не поднимается.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

14

Kettler пишет:
bobr пишет:

У меня xl2tpd автоматически реконнектится каждые пять секунд в случае разрыва. Причем запускаю его стандартным гентушным инит-скриптом.

Но если долгое время не отвечает впн сервер то не поднимается.

Возможно, это зависит от провайдера, потому что УМВР.

Йа тьомный эльф

15

Создал /var/run/1.pl с правами на выполнение и записал в него тело скрипта.
В /etc/crontab поместил строку 01 *    * * *    root    run-parts /var/run/1.pl
Сделал ребут.

Я правильно понял, что скрипт после первого выполнения зацикливается, а кусок с рестартом xl2tpd выполняется, когда прервется пинг на 8.8.8.8, после чего происходит задержка 16 секунд и скрипт выполняется по новой?

16 (21.01.2013 10:59:21 отредактировано Cewrio)

Выдернул провод на 20 секунд, но рестарта xl2tpd судя по всему не произошло, т.к. ip не поменялся.

17

И в логе крона /var/log/cron.log

Jan 21 11:17:01 debian /USR/SBIN/CRON[1776]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jan 21 11:21:47 debian /usr/sbin/cron[1071]: (CRON) INFO (pidfile fd = 3)
Jan 21 11:21:47 debian /usr/sbin/cron[1072]: (CRON) STARTUP (fork ok)
Jan 21 11:21:47 debian /usr/sbin/cron[1072]: (CRON) INFO (Running @reboot jobs)

нет ничего похожего на выполнение /var/run/1.pl

18 (21.01.2013 11:47:07 отредактировано Cewrio)

На сколько я понял, тут /var/run/ файлы долго не живут, так что перекочевал обратно в /etc/init.d/

Но крон от чего то не хочет его выполнять.



crontab -e -u root

01 * * * * /etc/init.d/1.pl

Тоже самое.

19

crontab -e -u root
01 * * * * echo "cron работает" > /tmp/cron_test.txt

файл не создался. ощущение что крон вообще не работает.

если ваш скрипт зациклен, может для его запуска крон и не нужен? поместить адрес в /etc/rc.local и запустится при старте системы, так и будет выполняться безконечно?

20

например

nano /etc/init.d/rec_xl2tpd.pl

туды

#!/usr/bin/perl
use strict;
use warnings;

use Proc::Daemon;
use Proc::PID::File;
use Net::Ping;

Proc::Daemon::Init;

if (Proc::PID::File->running()) {
print "Already running\n";
exit 0;
}

my $pidfile = "/var/run/xl2tpd.pid";
my $ip = '8.8.8.8';
my $p = Net::Ping->new( "icmp", 2, 64 );


my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };

while ($continue) {

if ( $p->ping($ip) ) {
} else {
   if( -e($pidfile) && -T _)
   {
   system   (`/etc/init.d/xl2tpd restart`);
   }
   else
   {
   system   (`/etc/init.d/xl2tpd start`);
   }
}
sleep (16);
}
chmod +x /etc/init.d/rec_xl2tpd.pl

Запусти вручную

./etc/init.d/rec_xl2tpd.pl

После

ls /var/run/ | grep .pl

Вывод должен быть не пустой.

После пробуй выдёргивать кабель.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

21

Вот лог как я проверил скрипт.
Физически выдернуть не могу.

root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
/var/run/xl2tpd.pid
root@marshrutizator:~# ls /var/run/ | grep .pl
1.pl.pid
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
/var/run/xl2tpd.pid
root@marshrutizator:~# /etc/init.d/xl2tpd stop
Stopping xl2tpd: xl2tpd.
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
ls: невозможно получить доступ к /var/run/xl2tpd.pid: Нет такого файла или каталога
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
/var/run/xl2tpd.pid
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
/var/run/xl2tpd.pid
root@marshrutizator:~# ls "/var/run/xl2tpd.pid"
/var/run/xl2tpd.pid
Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

22

Ну так что пашет?

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

23

ls /var/run/ | grep .pl выводится rec_xl2tpd.pl.pid и после /etc/init.d/xl2tpd stop ppp поднимается через некоторое время. Значит, полагаю, все работает.

24

А как проверить путем выдергивания провода? Sleep изменить с 16 на 1 и будет реконектить сразу же?