Страница 1 из 1
Перенаправить в Syslog
Добавлено: 2009-07-09 21:27:37
trio
Подскажите, возможно выполнение скрипта записать в syslog ?
или просто перенаправить в лог с датой выполнения прикрученый в crontabe
Код: Выделить всё
#!/usr/bin/perl
use CGI qw(:standard);
use Net::Ping;
$host = '192.168.1.10';
$p = Net::Ping->new('icmp');
if ($p->ping($host)) {use Net::Telnet;
$telnet = new Net::Telnet (Timeout=>10,
Prompt => '/[\w().-]*[\$#>:.]\s?(?:\(enable\))?\s*$/');
$telnet->open('xxx.xxx.x.xx');
$telnet->login('login', 'pass');
print $telnet->cmd('ls');
$telnet->close;
}
else {$output .= qq~$host - Сервер не пигнуется.\n~;}
$p->close();
#print header();
print $output;
Кстати может кому пригодиться скрит
писался под задачу следующего характера:
Пингуется удаленный модем, если все нормально, то по телнету с логином и паролем входим на модем с другой стороны и выполняем нужную комманду в данном случае эта команда чтения каталога "ls"
Можно легко поднастроить под свои нужды
Re: Перенаправить в Syslog
Добавлено: 2009-07-10 8:21:09
Syward
Код: Выделить всё
#!/usr/bin/perl
use CGI qw(:standard);
use Net::Ping;
$host = '192.168.1.10';
sub _log {
local($msg) = @_;
my $log_file = '/path/to/log/log.log';
open LF, ">>$log_file";.
print LF $msg;
close LF;
}
$p = Net::Ping->new('icmp');
if ($p->ping($host)) {use Net::Telnet;
$telnet = new Net::Telnet (Timeout=>10,
Prompt => '/[\w().-]*[\$#>:.]\s?(?:\(enable\))?\s*$/');
$telnet->open('xxx.xxx.x.xx');
$telnet->login('login', 'pass');
print $telnet->cmd('ls');
$telnet->close;
}
else {$output .= qq~$host - Сервер не пигнуется.\n~;}
$p->close();
#print header();
_log(_date(time)." $output\n");
print $output;
не?
Re: Перенаправить в Syslog
Добавлено: 2009-07-10 8:30:59
initYs
посмотреть тут
http://search.cpan.org/search?query=syslog&mode=all и использовать нечто из готовых модулей.
Re: Перенаправить в Syslog
Добавлено: 2009-07-10 14:32:06
trio
Код: Выделить всё
Undefined subroutine $main::_date called at ./ping.pl line 25
не канает.

Re: Перенаправить в Syslog
Добавлено: 2009-07-10 14:58:19
initYs
так и не будет.. нет подпрограммы _date() в листинге, подставь текущее время.. и я бы использовал Time::Local для перевода из формата time в необходимый.
Re: Перенаправить в Syslog
Добавлено: 2009-07-10 15:06:01
Syward
Код: Выделить всё
sub _date {
local($t) = @_;
local ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($t);
$mon++;
$year=$year+1900;
if ($sec < 10) {$sec="0".$sec;}
if ($min < 10) {$min="0".$min;}
if ($hour < 10) {$hour="0".$hour;}
if ($mday < 10) {$mday="0".$mday;}
if ($mon < 10) {$mon="0".$mon;}
return "$year-$mon-$mday $hour:$min:$sec";
}
забыл про него

UPD:
только сейчас заметил: раздел-то по шеллу.
Re: Перенаправить в Syslog
Добавлено: 2009-07-11 22:49:10
trio
Низкий тебе поклон Syward
Респек и уважуха
Все теперь отличненько работает и тихо пишет логи.
Всем остальным также спасибо за подсказки.
Можна тему закрывать
Re: Перенаправить в Syslog
Добавлено: 2009-07-22 11:44:37
paix
а к чему такие сложности, если достаточно стандартный вывод перенаправить конвеером в лог-файл ?
Re: Перенаправить в Syslog
Добавлено: 2009-07-22 13:51:18
Syward
paix писал(а):а к чему такие сложности, если достаточно стандартный вывод перенаправить конвеером в лог-файл ?
А если он заглушен или нужно не в лог перенаправить, а в мусю?
Re: Перенаправить в Syslog
Добавлено: 2009-07-22 14:22:48
paix
Syward писал(а):paix писал(а):а к чему такие сложности, если достаточно стандартный вывод перенаправить конвеером в лог-файл ?
А если он заглушен или нужно не в лог перенаправить, а в мусю?
про мусю речи не было.
В остальном это ошибочный способ проектирования. Ошибочный, потому что сложный.
Все должно быть настолько просто, насколько возможно.
Каждая программа должна хорошо выполнять свою функцию.
В сислог пишут демоны, которые запущены постоянно.
Отдельные маленькие програмки вообще не должны ничего знать о логах, сообщение со стандартного вывода можно направаить уже как угодно и куда угодно. Это проще и гибче.
И если программе нечего сказать, она должна молчать.
Re: Перенаправить в Syslog
Добавлено: 2009-07-22 19:31:25
Syward
paix писал(а):
про мусю речи не было.
В остальном это ошибочный способ проектирования. Ошибочный, потому что сложный.
Все должно быть настолько просто, насколько возможно.
Согласен. Но саб в пять строк кода вроде и не сложен, я думаю.
paix писал(а):
Каждая программа должна хорошо выполнять свою функцию.
А программер не должен задумываться, как ему залогировать то или иное действие, особенно - если скрипт работает с базой, в которой вывод на экран по понятным причинам заглушен.
paix писал(а):
В сислог пишут демоны, которые запущены постоянно.
Отдельные маленькие програмки вообще не должны ничего знать о логах, сообщение со стандартного вывода можно направаить уже как угодно и куда угодно. Это проще и гибче.
И опять-таки: зависит от ситуации. Решение должно быть как можно более универсальным.
paix писал(а):
И если программе нечего сказать, она должна молчать.
У меня скрипт висит, собирает fdb записи со свичей, так вот если ему нечего сказать, значит случился ахтунг и нужно слать мыло. кидать СМСки и вообще орать дурниной
А вообще, каждый делает как ему удобней. Мне удобней сделать библиотеку, подключить ее по мере необходимости и , если нужно какое-либо действие записать - сделать _log_mysql("ахтунг");, нежели городить бока с перенаправлением в сислог. Никому не навязываю, вам удобней в сислог перенаправить, без проблем

Re: Перенаправить в Syslog
Добавлено: 2009-07-23 11:10:15
paix
От задачи много чего зависит, безусловно.
Но я говорю в общем, о стиле программирования для UNIX.
Все программы в подавляющей массе придерживаются определенных правил и стиля. K.I.S.S.
Именно это и делает UNIX таким мощным.
Re: Перенаправить в Syslog
Добавлено: 2009-07-24 10:55:47
Alex Keda