Perl脚本根本没有在Crontab中运行

Perl脚本根本没有在Crontab中运行,perl,crontab,Perl,Crontab,我试图从crontab运行perl脚本,但遇到了困难。当我从命令行运行它时,它工作得非常好。我已经搜索并看到了关于环境等的各种答案,并指定了完整的路径,但我不确定是否正确。下面是脚本 #!/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

我试图从crontab运行perl脚本,但遇到了困难。当我从命令行运行它时,它工作得非常好。我已经搜索并看到了关于环境等的各种答案,并指定了完整的路径,但我不确定是否正确。下面是脚本

#!/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中工作?

看来,我运行它的目录很重要。当我从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运行。尽管我在第一个场景中指定了路径,但仍然不理解为什么结果不同

谢谢大家的回答。我的答案甚至不是一个真正的答案,只是一个解决办法

一些提示:

> $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;
更好地使用词法目录句柄:

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;
除非当前工作目录为$TG\u Stats\u directory!,否则此操作将失败:

opendir my $GSX, "$TG_Stats_directory/$subdir" or die $!;

>     my @csv_listing = readdir GSX;

>             foreach my $file (@csv_listing){
>                     if ($file =~ /\.csv/){
你是说以.csv结尾的文件吗

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

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

      closedir $GSX;
> }       

> close TG_Stats;

closedir $TG_Stats;
嗯,,
Paul

您的
/tmp/cronerrors.txt文件中是否有任何内容?它以什么方式不运行?从来没有打过电话吗?有错误?您可能希望将重定向更改为
>
,而不是
>
,这样您就不会丢失旧错误。您的
$ENV{'PATH}
中缺少冒号,但这不重要。您应该在目录句柄上使用
closedir
,而不是
close
。此外,您可能需要查看一个有用的返回值(如果
取消链接
失败,那么
$!
)。