Perl-скрипт вообще не работает в Crontab - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь запустить Perl-скрипт из crontab, но у меня возникли трудности. Он отлично работает, когда я запускаю его из командной строки. Я искал и видел различные ответы об окружающей среде и т. Д. И указывал полные пути, но я не уверен, правильно ли я это делаю. Ниже приведен скрипт

#!/usr/bin/perl

$ENV{'PATH'} = '/usr/bin:/usr/sbin/usr/local/bin';

use strict;

my $TG_Stats_directory = "/export/home/SonusNFS/TG_Stats";

opendir TG_Stats, $TG_Stats_directory;

my @GSX_directories = readdir TG_Stats;

foreach my $subdir (@GSX_directories) {

        opendir GSX, $subdir;
        my @csv_listing = readdir GSX;
                foreach my $file (@csv_listing){
                        if ($file =~ /\.csv/){
                                unlink $TG_Stats_directory."/".$subdir."/".$file;
                        }               
                }
        close GSX;      

}       

close TG_Stats;

Ниже находится запись в crontab.

25 03 * * * /usr/bin/perl /export/home/SonusNFS/TG_Stats/rmdir.pl 2>/tmp/cronerrors.txt

Чего мне не хватает? Что мне нужно добавить, чтобы он работал в Cron?

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Похоже, что каталог, из которого я его запускаю, имеет значение.Когда я запускаю его с правами root следующим образом:

# cd /
# perl /export/home/SonusNFS/TG_Stats/rmdir.pl

Я получаю совершенно другой набор результатов:

# cd /export/home/SonusNFS/TG_Stats/
# perl rmdir.pl

Имея это в виду, я добавил это в скрипт:

my $directory = "/export/home/SonusNFS/TG_Stats";
chdir($directory) or die "Can't chdir to $directory $!";

Наконец-то побежал от cron.До сих пор не понимаю, почему результаты были разными, хотя я указал путь в первом сценарии.

Спасибо за ответы, ребята.Мой ответ даже не реальный, просто обходной путь

0 голосов
/ 23 ноября 2011

Некоторые указатели:

> $ENV{'PATH'} = '/usr/bin:/usr/sbin/usr/local/bin';

$ENV{PATH} = '/usr/bin:/usr/sbin:/usr/local/bin';

> use strict;

не забывайте предупреждения:

use warnings;

> my $TG_Stats_directory = "/export/home/SonusNFS/TG_Stats";

> opendir TG_Stats, $TG_Stats_directory;

лучше используйте лексические DIR-ручки:

opendir my $TG_Stats... or die $!;

> my @GSX_directories = readdir TG_Stats;

Вы понимаете, что''и «..» в вашем списке сейчас, не так ли?

my @GSX_directories = grep !/^\.\.?$/, readdir TG_Stats;

> foreach my $subdir (@GSX_directories) {

>     opendir GSX, $subdir;

Это не удастся, ЕСЛИ ваш текущий рабочий каталог IS $ TG_Stats_directory!КОНЕЦ в .csv?

                      if ( $file =~ /\.csv$/ ) {

>                             unlink $TG_Stats_directory."/".$subdir."/".$file;
>                     }               
            }
>     close GSX;      

      closedir $GSX;
> }       

> close TG_Stats;

closedir $TG_Stats;

HTH, Пол

...