运行 计划任务中的 perl Plackup 脚本
Run perl Plackup script from Scheduled Task
如何使用任务计划程序或批处理文件在脚本路径之前使用前面的参数调用脚本? 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"
这表示 "Can't open perl script"。
我继续尝试使用另一个 perl 脚本来执行我的命令...
#! C:\strawberry\perl\bin\perl.exe
`plackup E:\Mojolicious_Server.pl`;
这至少在任务计划程序中成功完成,但实际上并没有做任何事情...
万不得已(显然行不通),我添加了plackup E:\Mojolicious_Server.pl
;在我的 Mojolicious_Server.pl 脚本和 运行 该脚本的末尾。没有像我预期的那样工作(调用已经 运行ning 的脚本)。
这看起来应该很简单,如果我遗漏了一些简单的东西,我很抱歉。任何正确方向的想法都将不胜感激。
另外,我之所以这样做,是因为我严格处于 windows 环境中。如果有更好的方法,请再次向正确的方向轻推。
如问题评论中所述,只需调用序列 plackup E:/Mojolicious_Server.pl
确保将完整路径添加到 plackup
脚本。对于@gregnnylf94,它是:
c:\strawberry\perl\site\bin\plackup E:\Mojolicious_server.pl
这是因为 cron 作业与 shell 作业的上下文不同。最常见的问题来自 PATH
变量,它是找到您要执行的内容的关键。
在 Windows 和 Linux 系统中也是如此。
如何使用任务计划程序或批处理文件在脚本路径之前使用前面的参数调用脚本? 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"
这表示 "Can't open perl script"。
我继续尝试使用另一个 perl 脚本来执行我的命令...
#! C:\strawberry\perl\bin\perl.exe
`plackup E:\Mojolicious_Server.pl`;
这至少在任务计划程序中成功完成,但实际上并没有做任何事情...
万不得已(显然行不通),我添加了plackup E:\Mojolicious_Server.pl
;在我的 Mojolicious_Server.pl 脚本和 运行 该脚本的末尾。没有像我预期的那样工作(调用已经 运行ning 的脚本)。
这看起来应该很简单,如果我遗漏了一些简单的东西,我很抱歉。任何正确方向的想法都将不胜感激。
另外,我之所以这样做,是因为我严格处于 windows 环境中。如果有更好的方法,请再次向正确的方向轻推。
如问题评论中所述,只需调用序列 plackup E:/Mojolicious_Server.pl
确保将完整路径添加到 plackup
脚本。对于@gregnnylf94,它是:
c:\strawberry\perl\site\bin\plackup E:\Mojolicious_server.pl
这是因为 cron 作业与 shell 作业的上下文不同。最常见的问题来自 PATH
变量,它是找到您要执行的内容的关键。
在 Windows 和 Linux 系统中也是如此。