尝试通过 bsub 设置 Windows 任务计划程序时出现错误

问题描述 投票:0回答:1

当我运行命令时:

SCHTASKS /create  /tn "ADW_generic" /s noivw-pulsereg3 /tr "\"U:\adw_prerun_bat_file\filesToUseInAutomatedPvReg\ADWGeneric_cic.bat\" -var 23232 "  /sc ONCE /sd 12/29/2014 /st 12:00  /f

那么就没有问题了。

但是,当我在 Perl 中通过 bsub (使用系统)运行相同的命令时,如下所示:

my $cmdTriggerServerSetup = "bsub -J ADWServer -m machine1 -e //noida02/psd/error_tette.log -q win_normal \'SCHTASKS /create  /tn \"ADW_generic\" /s noivw-pulsereg3 /tr \"\"U:\\adw_prerun_bat_file\\filesToUseInAutomatedPvReg\\ADWGeneric_cic.bat\" -var 23232 \"  /sc ONCE /sd 12/29/2014 /st 12:00  /f\'";

出现以下错误:

ERROR: Invalid argument/option - '-var'.
Type "SCHTASKS /CREATE /?" for usage.

如何消除这个错误?我知道错误在某种程度上是由于引号引起的,因此需要帮助弄清楚如何将引号添加到命令中。

我希望所需的字符串是

SCHTASKS /create  /tn "ADW_generic" /s noivw-pulsereg3 /tr "\"U:\adw_prerun_bat_file\filesToUseInAutomatedPvReg\ADWGeneric_cic.bat\" -var 23232 "  /sc ONCE /sd 12/29/2014 /st 12:00  /f

但是当我使用 as 时:

my $cmdTriggerServerSetup = "bsub -J ADWServer -m machine1 -e //noida02/psd/error_tette.log -q win_normal \'SCHTASKS /create  /tn \"ADW_generic\" /s noivw-pulsereg3 /tr \"\\"U:\\adw_prerun_bat_file\\filesToUseInAutomatedPvReg\\ADWGeneric_cic.bat\\" -var 23232 \"  /sc ONCE /sd 12/29/2014 /st 12:00  /f\'";

它给我一个错误:

Bareword found where operator expected at test.pl line 24, near "U"
        (Missing operator before U?)
windows perl scheduled-tasks lsf
1个回答
0
投票

问题如所陈述,并有一些猜测来填补空白:

您对某些未指定的 shell 有此 shell 命令:

SCHTASKS /create  /tn "ADW_generic" /s noivw-pulsereg3 /tr "\"U:\adw_prerun_bat_file\filesToUseInAutomatedPvReg\ADWGeneric_cic.bat\" -var 23232 "  /sc ONCE /sd 12/29/2014 /st 12:00  /f

您想将其作为参数传递给

bsub

bsub -J ADWServer -m machine1 -e //noida02/psd/error_tette.log -q win_normal '...'

并且您希望在使用

system
的系统上使用 Perl 的
sh
来运行它。 (你实际上说
csh
以某种方式参与其中,但没有解释如何参与。)


首先,让我们将该字符串放入变量中。在特定情况下,我们可以简单地使用单引号。

my $remote_cmd = 'SCHTASKS /create  /tn "ADW_generic" /s noivw-pulsereg3 /tr "\"U:\adw_prerun_bat_file\filesToUseInAutomatedPvReg\ADWGeneric_cic.bat\" -var 23232 "  /sc ONCE /sd 12/29/2014 /st 12:00  /f';

接下来,我们需要为

sh
构建 bsub 命令。

use String::ShellQuote qw( shell_quote );

my $local_cmd = shell_quote(
   bsub => (
      -J => "ADWServer",
      -m => "machine1",
      -e => "//noida02/psd/error_tette.log",
      -q => "win_normal",
      $remote_cmd,
   )
);

最后,这只是执行它的问题,看起来像这样

system( $local_cmd );

请注意,您可以通过使用以下内容来避免本地 shell 和

shell_quote
的需要:

system(
   bsub => (
      -J => "ADWServer",
      -m => "machine1",
      -e => "//noida02/psd/error_tette.log",
      -q => "win_normal",
      $remote_cmd,
   )
);
© www.soinside.com 2019 - 2024. All rights reserved.