0

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

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

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

c:\strawberry\perl\bin\perl.exe D:\AWStats\wwwroot\cgi-bin\awstats.pl config=earlsmere.co.uk -update

有人有什么想法吗?

4

2 回答 2

1

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

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

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

于 2012-06-04T10:03:05.403 回答
0

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

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

c:\strawberry\perl\bin\perl.exe D:\AWStats\wwwroot\cgi-bin\awstats.pl config=earlsmere.co.uk -update > c:\my_log.txt 2>&1

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

于 2012-06-04T09:51:58.317 回答