【问题标题】:Execute Perl script from Java tomcat returns ever 255 exit code从 Java tomcat 执行 Perl 脚本返回 255 退出代码
【发布时间】:2016-04-25 08:22:22
【问题描述】:

我有一个问题,我正在尝试执行分配在另一台服务器上的 PERL 脚本。如果我在 Linux Shell 中执行命令,脚本会正确运行。如果我在apache Tomcat的同一服务器中执行分配perl脚本的脚本,运行正常,但是当我尝试通过Tomcat通过ssh执行脚本时,总是以错误代码255结束。

Perl 脚本:

#!/usr/bin/perl
my $sleeptime = 10;
sleep($sleeptime);

my $argumento=$ARGV[0];
if ( $argumento eq "A" ) {
    exit 0;
} else {
    exit 192;
}

现在,这是Java文件中的代码

String command = "ssh root@myserver.com '/usr/bin/perl /var/www/testPerl.pl A'";
process = Runtime.getRuntime().exec(command);
process.waitFor();  
if ( process.exitValue() == 0 ) {
    System.out.println("Show icon ok");
} else {
    System.out.println("Show error");
}

如果我将命令变量更改为

String command = "/usr/bin/perl /var/www/testPerl.pl A";

返回码没问题(0或192)

必须远程执行,所以我无法将真正的PERL复制到tomcat目录。我做 localy 只是为了测试。

【问题讨论】:

  • 直接进入ssh命令是否运行(不带Tomcat)?您收到任何错误消息吗?是否为 Tomcat 用户设置了无密码 SSH? /var/www 中的脚本是否也存在于您 ssh 到的服务器上?
  • 当我使用 shell Linux 运行时,它运行完美。如果我使用“A”参数运行,则返回 0,或者当我使用其他参数运行时返回 192

标签: java perl ssh


【解决方案1】:

您是否以 Tomcat 用户身份尝试从 Tomcat 服务器进行 SSH 调用,例如

ssh root@myserver.com '/usr/bin/perl /var/www/testPerl.pl A'

尝试添加 -v 作为 ssh 参数并捕获输出以查看 ssh 连接是否正常工作。也许您缺少 RSAAuthentication(基于密钥而不是基于密码)或其他无法正常工作的东西。

尝试从 Perl 返回一些值进行调试:

print "I'm running (STDOUT)\n";
print STDERR "I'm running (STDERR)\n";

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多