从计划任务运行 perl Plackup 脚本

Posted

技术标签:

【中文标题】从计划任务运行 perl Plackup 脚本【英文标题】:Run perl Plackup script from Scheduled Task 【发布时间】:2018-03-25 16:38:35 【问题描述】:

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

【问题讨论】:

您知道您的PATH 变量对于计划进程来说是什么样的吗?我会尝试<full path>/plackup E:/Mojolicious_Server.pl 嗯,你知道我不确定。不过绝对值得研究!我会看看我能找到什么。我会带着结果回来的。谢谢! @JavierElices 好的,所以我找到了我的plackup 路径,即c:\strawberry\perl\site\bin\plackup 我可以从命令行运行c:\strawberry\perl\site\bin\plackup E:\Mojolicious_server,它可以工作!但是从任务计划程序我得到一个“0x1”错误......似乎是正确的方向,谢谢。 我不确定与我第一次尝试有什么不同,但你说的完全正确。通过提出我的论点c:\strawberry\perl\site\bin\plackup E:\Mojolicious_server.pl 来解决。谢谢!!! 哦,我想你会写一个答案,这样你就可以得到你的代表点...... :) 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于从计划任务运行 perl Plackup 脚本的主要内容,如果未能解决你的问题,请参考以下文章

用计划任务运行bat脚本结果和手动运行脚本不一致,脚本内容只有一条move

linux脚本放到计划任务里面执行结果与手动运行不一致

WIN7 64位系统任务计划程序里运行VBS脚本 报错,脚本本身没问题!请问怎么解决?

Powershell 脚本无法使用任务计划程序通过 Outlook 发送电子邮件

从任务计划程序运行时如何重定向 PowerShell 输出?

将脚本作为计划任务运行时出现“找不到路径”