从计划任务

时间:2017-10-13 13:59:13

标签: perl taskscheduler plack

如何使用任务计划程序或批处理文件在脚本路径之前使用前面的参数调用脚本? plackup E:\Mojolicious_server.pl

所以我有多个Mojolicious应用程序。 我使用plack将它们全部捆绑到psgi服务器中。

我的plack脚本看起来像这样......

use Plack::Builder;
use lib 'push_the_button/lib';
use lib 'Phone_Book/lib';

use Mojo::Server::PSGI;
use Plack::Session::Store;
use Data::Dumper;
use File::Basename;

my $current_directory = dirname(__FILE__);

my $push_the_button, $phone_book;


{
  my $server_1 = Mojo::Server::PSGI->new;
  $server_1->load_app($current_directory.'/Phone_Book/script/application');
  $phone_book = sub { $server_1->run(@_) }
}

{
  my $server_2 = Mojo::Server::PSGI->new;
  $server_2->load_app($current_directory.'/push_the_button/script/push_the_button.pl');
  $push_the_button = sub { $server_2->run(@_) }
}

builder {

  mount "/phone_book" => builder {$phone_book};
  mount "/push_the_button" => builder {$push_the_button};
};

现在我想在系统启动时将其作为计划任务运行。

正常运行此脚本,我会转到cmd pushd c:\strawberry\perl\bin

然后我会运行这个命令

plackup E:/Mojolicious_Server.pl

我的问题似乎是plackup部分。 我尝试将plackup E:/Mojolicious_Server.pl添加到Arguments部分。我还尝试将plackup添加到参数部分,并在开始部分添加E:/Mojolicious_Server.pl。当然C:\strawberry\perl\bin\perl.exe是要开始的计划。

一旦我尝试了所有可以想到的变体(包括双引号和单引号的变体),我写了一个非常简单的批处理文件来运行(即使只是在终端进行测试)。它看起来像这样。

@echo off

call "C:\Strawberry\perl\bin\perl.exe" "plackup E:\Mojolicious_Server.pl"

其中说"无法打开perl脚本"。

我继续使用另一个perl脚本尝试另一条路线执行我的命令......

#! C:\strawberry\perl\bin\perl.exe

`plackup E:\\Mojolicious_Server.pl`;

这至少在任务计划程序中成功完成,但实际上并没有做任何事情......

作为最后的手段(显然不会工作),我添加了plackup E:\\Mojolicious_Server.pl;在我的Mojolicious_Server.pl脚本的末尾并运行该脚本。没有像我预期的那样工作(调用已经运行的脚本)。

这似乎应该很容易,如果我遗漏了一些简单的话,我很抱歉。任何正确方向的想法都会受到赞赏。

此外我只是这样做,因为我严格在Windows环境中。如果有更好的方法,请再次向正确的方向推进。

1 个答案:

答案 0 :(得分:2)

如问题评论中所述,只需调用序列plackup E:/Mojolicious_Server.pl,确保添加plackup脚本的完整路径。在@ gregnnylf94的情况下,它是:

c:\strawberry\perl\site\bin\plackup E:\Mojolicious_server.pl

这是因为 cron 作业与 shell 作业不具有相同的上下文。最常见的问题来自PATH变量,它是查找要执行的内容的关键。

在Windows和Linux系统中也是如此。