LINUX.ORG.RU

Perl. парсинг командной строки


0

0

Уважаемые коллеги.

в скрипте Perl получаю вывод команды ifconfig с целью дальнейшей обработки:
my $ip_my, $ip_gw;
my $iface = tun0;
my $list = `ifconfig $iface | grep inet `;

затем вычленяю адрес интерфейса шлюза:
my @fields = split (/ /,$list);
$ip_my = @fields[1];
$ip_gw = @fields[3];

внимание - вопрос:
почему скрипт нормально отрабатывает, когда запускается ручками в консоли и не работает, когда выполняется по cron-у ?


> и не работает, когда выполняется по cron-у ?

PATH environment

dilmah ★★★★★
()

Привести запуск из консоли к тому, как он выполняется по cron'у можно предваряя строку env'ом (для отладки). Как-то так: env - script.pl

ddt
()

man 5 crontab /MAILTO позволяет решать эту и все остальные проблемы с кроном

true_admin ★★★★★
()

>почему скрипт нормально отрабатывает, когда запускается ручками в консоли и не работает, когда выполняется по cron-у ?

У тебя в консоли установлены переменные окружения (в частности PATH)
Запускай не ifconfig,а /sbin/ifconfig

ovax ★★★
()
Ответ на: комментарий от ovax

спасибо за отклик, прошу прощения за задержку с ответом.
1) переменные окружения установлены;
2) ifconfig выдаёт многострочный вывод, из которого мне нужна строка с моим айпишником и айпишником гейтвея. Опыт в Перле небольшой (" в тапёра не стрелять - играет как умеет"(С)) - если посоветуете кошерный способ вычисления айпишника на интерфейсе - буду благодарен.

capo
() автор топика
Ответ на: комментарий от dimon555

спасибо за отклик, прошу прощения за задержку с ответом.
1) переменные окружения установлены;
2) ifconfig выдаёт многострочный вывод, из которого мне нужна строка с моим айпишником и айпишником гейтвея. Опыт в Перле небольшой (" в тапёра не стрелять - играет как умеет"(С)) - если посоветуете кошерный способ вычисления айпишника на интерфейсе - буду благодарен.

capo
() автор топика

Ещё раз всем спасибо за ответы.
Вот рабочий фрагмент, закрывающий мои проблемы:

#!/usr/bin/perl

my $iface=tun0;
my $ifconfig=`/sbin/ifconfig $iface`;
my $ifconfig_for_gw=$ifconfig;

$ifconfig=~/inet\s(\S*)/;
$ip=$1;
$ifconfig_for_gw=~/-->\s(\S*)/;
$gw=$1;
print $ip, "\n";
print $gw, "\n";

`echo "мой IP: $ip" >> /var/log/istun0.txt`;
`echo "мой GW: $gw" >> /var/log/istun0.txt`;

capo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.