Perl脚本根本没有在Crontab中运行
我试图从crontab运行perl脚本,但遇到了困难。当我从命令行运行它时,它工作得非常好。我已经搜索并看到了关于环境等的各种答案,并指定了完整的路径,但我不确定是否正确。下面是脚本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
#!/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
。此外,您可能需要查看一个有用的返回值(如果取消链接
失败,那么$!
)。