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

shutdown -p now if not ping

Добавлено: 2009-04-08 10:01:41
KlaccuK
Добрый день.
есть UPS 2000 подключенный к серверу для корректного завершения работы Win 2к3. при сбоях электроэнергии.
на этотом UPS висят еще коммутатор и proxy на FreeBSD.
цель: отключить freeBSD если не возможно pingануть Win 2k3

знакомый запилил такой скрипт:

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

/usr/local/crons/>cat shutdown.pl
#!/usr/bin/perl

use Net::Ping;

#################################################
my $host = '192.168.0.8'; # host to ping
my $pings = 5;      # number of pings to send
#################################################

my $count = 0;      # number of received pings (DO NOT EDIT)
$p = Net::Ping->new("icmp");
for(my $i = 0; $i < $pings; $i++)
{
     $count++ if($p->ping($host, 2));
     sleep(1);
}
$p->close();

if($count){
     print "Pings sent/rcvd $pings/$count\nHost is reacheble. Doing nothing...\n"; }else{
     print "shutdown -p now";
     #uncomment next string to make actual shutdown
     `shutdown -p now`;
}
только он не работает если его запускать cron-ом!

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

/usr/local/crons/>tail -f /var/log/cron
Apr  8 10:50:00 myproxy /usr/sbin/cron[1538]: (root) CMD (/usr/local/crons/shutdown.pl)
Apr  8 10:50:15 myproxy cron[1536]: (root) MAIL (mailed 15 bytes of output but got status 0x004e )
Apr  8 10:55:00 myproxy /usr/sbin/cron[1546]: (operator) CMD (/usr/libexec/save-entropy)
Apr  8 10:55:00 myproxy /usr/sbin/cron[1548]: (root) CMD (/usr/local/crons/shutdown.pl)
Apr  8 10:55:00 myproxy /usr/sbin/cron[1547]: (root) CMD (/usr/libexec/atrun)
Apr  8 10:55:15 myproxy cron[1545]: (root) MAIL (mailed 15 bytes of output but got status 0x004e )
Apr  8 11:00:00 myproxy /usr/sbin/cron[1568]: (root) CMD (newsyslog)
Apr  8 11:00:00 myproxy /usr/sbin/cron[1569]: (operator) CMD (/usr/libexec/save-entropy)
Apr  8 11:00:00 myproxy /usr/sbin/cron[1571]: (root) CMD (/usr/libexec/atrun)
Apr  8 11:00:00 myproxy /usr/sbin/cron[1572]: (root) CMD (/usr/local/crons/shutdown.pl)
Apr  8 11:00:15 myproxy cron[1570]: (root) MAIL (mailed 15 bytes of output but got status 0x004e )

Re: shutdown -p now if not ping

Добавлено: 2009-04-08 10:32:27
skeletor
А вы уверенны, что скрипт отрабатывает? Отдебажте его, например, так

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

#!/usr/bin/perl

use Net::Ping;

#################################################
my $host = '192.168.0.8'; # host to ping
my $pings = 5;      # number of pings to send
#################################################

my $count = 0;      # number of received pings (DO NOT EDIT)
$p = Net::Ping->new("icmp");
for(my $i = 0; $i < $pings; $i++)
{
     $count++ if($p->ping($host, 2));
     sleep(1);
}
$p->close();
print "count = $count";

#if($count){
#     print "Pings sent/rcvd $pings/$count\nHost is reacheble. Doing nothing...\n"; }else{
#    print "shutdown -p now";
#     #uncomment next string to make actual shutdown
#     `shutdown -p now`;
#}
и попробуйте его запустить, 2 раза: первый, когда сеть доступна, и второй - когда нет. Сравните выводимые значения. Во втором случае должен быть 0.
Да, и ещё, возможно интервал в 1 секунду слишком мал, попробуйте сделать 2-3.

Re: shutdown -p now if not ping

Добавлено: 2009-04-08 10:37:59
KlaccuK
skeletor писал(а):А вы уверенны, что скрипт отрабатывает? Отдебажте его, например, так

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

#!/usr/bin/perl

use Net::Ping;

#################################################
my $host = '192.168.0.8'; # host to ping
my $pings = 5;      # number of pings to send
#################################################

my $count = 0;      # number of received pings (DO NOT EDIT)
$p = Net::Ping->new("icmp");
for(my $i = 0; $i < $pings; $i++)
{
     $count++ if($p->ping($host, 2));
     sleep(1);
}
$p->close();
print "count = $count";

#if($count){
#     print "Pings sent/rcvd $pings/$count\nHost is reacheble. Doing nothing...\n"; }else{
#    print "shutdown -p now";
#     #uncomment next string to make actual shutdown
#     `shutdown -p now`;
#}
и попробуйте его запустить, 2 раза: первый, когда сеть доступна, и второй - когда нет. Сравните выводимые значения. Во втором случае должен быть не 0.
Да, и ещё, возможно интервал в 1 секунду слишком мал, попробуйте сделать 2-3.
когда руками стартуешь ./shutdown.pl, работает)))) проверял.

Re: shutdown -p now if not ping

Добавлено: 2009-04-08 11:51:18
Sadok123
Hint:

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

which shutdown
:)

Re: shutdown -p now if not ping

Добавлено: 2009-04-08 11:59:21
skeletor
Пропишите полный путь здесь

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

`shutdown -p now`
к shutdown.
И вообще, лучше когда что-то пишешь в крон, писать с полными путями при обращении ко всем файлам.

Re: shutdown -p now if not ping

Добавлено: 2009-04-08 12:26:46
KlaccuK
всем thx :pardon: посмотрел что выдает cron. > /tmp/cron
и тоже понял))) и про $PATH вспомнил)))