我正在尝试从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中运行?
答案 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, 保罗