4

如何使用任务计划程序或批处理文件在脚本路径之前调用具有前面参数的脚本?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到参数部分。我还尝试添加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 环境。如果有更好的方法,请再次向正确的方向轻推。

4

1 回答 1

2

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

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

之所以如此,是因为cron作业与shell作业没有相同的上下文。最常见的问题来自于PATH变量,它是查找您想要执行的内容的关键。

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

于 2017-10-13T21:07:28.210 回答