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

时间:2011-11-23 03:58:56

标签: 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, $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 个答案:

答案 0 :(得分:2)

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

感谢所有人的答案。我的答案甚至不是一个真正的答案,只是一个解决方法

答案 1 :(得分:0)

一些指示:

> $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!:

,否则失败
opendir my $GSX, "$TG_Stats_directory/$subdir" or die $!;

>     my @csv_listing = readdir GSX;

>             foreach my $file (@csv_listing){
>                     if ($file =~ /\.csv/){

你不是指.csv中的文件ENDING?

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

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

      closedir $GSX;
> }       

> close TG_Stats;

closedir $TG_Stats;

HTH, 保罗