从 Windows 计划任务运行 Perl 脚本



我在Windows 2008服务器上安装了awstats。我安排 Updatestats.bat 文件每天运行,任务运行良好,没有错误,但脚本未执行或抛出我看不到的错误。

-- 如果我直接从命令行运行 bat 文件,那么它工作正常。

我已经尝试了Windows调度程序的各种替代方案,例如" nncron "和" Freebyte Task Scheduler",nncron 有同样的问题,但 freebyte 应用程序可以工作,但遗憾的是它不作为服务运行,所以没有用。这是 BAT 文件的内容,所有行都如下所示。

c:strawberryperlbinperl.exe D:AWStatswwwrootcgi-binawstats.pl config=earlsmere.co.uk -update

有人有什么想法吗?

您的无人值守环境显然与命令行不同。检查是否设置了以下内容:

  1. 脚本的工作目录(如果它从中读取任何内容或使用相对路径)。
  2. PERL*_LIB 环境变量(如果您的脚本使用任何模块)。
  3. PATH 环境变量(如果您的脚本调用任何外部脚本/二进制文件)。
  4. 运行计划任务的用户对您想要执行的所有操作具有足够的权限。

作为快速解决方法,您可以使用chdir函数、lib模块和$ENV{PATH}条目直接在脚本中设置它们。

在开始执行其他任何操作之前,还可以尝试通过以下重定向捕获标准输出和错误:

open(STDOUT, '>>', '/full/path/to/out.log') || die "Error stdout: $!";
open(STDERR, '>>', '/full/path/to/err.log') || die "Error stderr: $!";
请注意,您确实

应该在那里使用完整路径,以防您确实设置了错误的工作目录。并确保目标目录/文件对任何人都是可写的。

看起来输出在空间中丢失了...

我建议将命令的输出重定向到文件,如下所示:

c:strawberryperlbinperl.exe D:AWStatswwwrootcgi-binawstats.pl config=earlsmere.co.uk -update > c:my_log.txt 2>&1

(由Anders Lindahl提供:将stdout和stderr重定向到DOS中的单个文件)

最新更新