我在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
有人有什么想法吗?
您的无人值守环境显然与命令行不同。检查是否设置了以下内容:
- 脚本的工作目录(如果它从中读取任何内容或使用相对路径)。
- PERL*_LIB 环境变量(如果您的脚本使用任何模块)。
- PATH 环境变量(如果您的脚本调用任何外部脚本/二进制文件)。
- 运行计划任务的用户对您想要执行的所有操作具有足够的权限。
作为快速解决方法,您可以使用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中的单个文件)