从计划任务运行perl Plackup脚本

b09cbbtk  于 2023-10-24  发布在  Perl
关注(0)|答案(1)|浏览(163)

如何使用任务脚本或批处理文件在脚本路径之前调用带有上述参数的脚本?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`;

这至少在任务栏中成功完成了,但实际上并没有做任何事情。
作为最后的手段(显然行不通),我在Mojolicious_Server.pl脚本的末尾添加了plackup E:\\Mojolicious_Server.pl;并运行该脚本。
这看起来应该很简单,如果我错过了一些简单的东西,我很抱歉。任何正确方向的想法都将受到赞赏。
而且我只是这样做,因为我是严格的windows环境。如果有更好的方法,再次,请只是在正确的方向轻推。

rpppsulh

rpppsulh1#

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

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

这是因为 cron 作业与 shell 作业没有相同的上下文。最常见的问题来自PATH变量,该变量是查找您想要执行的内容的关键。
这在Windows和Linux系统中同样适用。

相关问题