shutdown -p now if not ping

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
KlaccuK
рядовой
Сообщения: 16
Зарегистрирован: 2008-02-24 21:37:57

shutdown -p now if not ping

Непрочитанное сообщение KlaccuK » 2009-04-08 10:01:41

Добрый день.
есть 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 )

Хостинговая компания 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
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: shutdown -p now if not ping

Непрочитанное сообщение skeletor » 2009-04-08 10:32:27

А вы уверенны, что скрипт отрабатывает? Отдебажте его, например, так

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

#!/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.

KlaccuK
рядовой
Сообщения: 16
Зарегистрирован: 2008-02-24 21:37:57

Re: shutdown -p now if not ping

Непрочитанное сообщение KlaccuK » 2009-04-08 10:37:59

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, работает)))) проверял.

Sadok123
сержант
Сообщения: 179
Зарегистрирован: 2008-09-04 10:59:32

Re: shutdown -p now if not ping

Непрочитанное сообщение Sadok123 » 2009-04-08 11:51:18

Hint:

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

which shutdown
:)

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: shutdown -p now if not ping

Непрочитанное сообщение skeletor » 2009-04-08 11:59:21

Пропишите полный путь здесь

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

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

KlaccuK
рядовой
Сообщения: 16
Зарегистрирован: 2008-02-24 21:37:57

Re: shutdown -p now if not ping

Непрочитанное сообщение KlaccuK » 2009-04-08 12:26:46

всем thx :pardon: посмотрел что выдает cron. > /tmp/cron
и тоже понял))) и про $PATH вспомнил)))