如何从批处理文件中每分钟调用一次 perl 文件

如何从批处理文件中每分钟调用一次 perl 文件

我编写了一个 perl 脚本,并尝试每隔 1 分钟从批处理文件中调用一次。

没有错误,但它不会每 1 分钟调用一次。单击 .bat 文件一次,它只会弹出命令提示符。我要执行的代码是:(batchTestShe.bat)ccc.pl 和 batchTestShe.bat 位于同一文件夹中,并且 ccc.pl 仅在我单击 batchTestShe.bat 一次时运行,但从不重复执行。

schtasks /create /tn "batch Script" /tr C:\shekhar_Axestrack_Intern\WindowCreation\batchTestShe.bat /sc minute /mo 1 
perl C:\shekhar_Axestrack_Intern\WindowCreation\ccc.pl

我可以在 taskschd.msc 上看到它显示下一分钟将执行,但下一分钟不会弹出命令提示符。为什么,有什么想法吗?

请注意,我也不希望在提示符下出现类似这样的消息。该文件已存在,是否要将其重命名为 Y/N?我只想每分钟不停地运行它。

答案1

如果您的批处理脚本所做的就是每 60 秒调用一次 Perl 脚本,那么您可以将逻辑放在 Perl 脚本本身中并减少一些混乱。

#!perl

while(1){

...

Your code here

...

sleep(60);
}

如果你需要更高级的调度,你甚至可以使用类似的模块https://metacpan.org/pod/EV::Cron在您的系统中启用 Cron-ish 作业调度。

答案2

您有一个批处理文件,它一遍又一遍地重新创建相同的计划任务。您可以避免创建计划任务,只需将其作为批处理文件即可:

:START
    perl C:\shekhar_Axestrack_Intern\WindowCreation\ccc.pl
    timeout /t 60
goto :START

或者,将您的 perl 脚本包装在 while 循环中,每 60 秒运行一次:

while (1) {
    sleep 60;
    your ccc.pl code goes here;
}

这些解决方案将导致偏差,因为它们需要(60 秒 + 脚本执行时间)才能运行。如果您需要它每 60 秒准确运行一次,请坚持使用任务调度程序方法,但尝试直接启动您的 perl 脚本,而不是通过批处理文件。还要确保您的脚本运行时间不超过 60 秒,否则您最终可能会有多个实例并行运行。

schtasks /create /tn "run ccc.pl once a minute" /tr "perl C:\shekhar_Axestrack_Intern\WindowCreation\ccc.pl" /sc minute /mo 1

相关内容