从Windows计划任务运行perl脚本

时间:2012-06-03 12:23:59

标签: windows perl

我在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
谁有任何想法?

2 个答案:

答案 0 :(得分:1)

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

  1. 脚本的工作目录,如果它从中读取任何内容或使用相对路径。
  2. 如果脚本使用任何模块,则为PERL * _LIB环境变量。
  3. PATH环境变量,如果您的脚本调用任何外部脚本/二进制文件。
  4. 正在运行计划任务的用户对您要执行的所有操作拥有足够的权限。
  5. 作为一种快速解决方法,您可以使用chdir functionlib module$ENV{PATH} entry直接在脚本中设置它们。

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

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

    请注意,如果确实有工作目录设置错误,您确实应该使用完整路径。并确保目标目录/文件对任何人都可写。

答案 1 :(得分: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提供:Redirect stdout and stderr to a single file in DOS