java - 从 Java tomcat 执行 Perl 脚本返回 255 退出代码

标签 java perl ssh

我遇到问题,我正在尝试执行分配在另一台服务器上的 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目录中。我在本地只是为了测试。

最佳答案

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

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

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

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

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

关于java - 从 Java tomcat 执行 Perl 脚本返回 255 退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36835328/

相关文章:

java - Tomcat 7 和 ScheduledExecutorService.shutdown

java - 如何在 Java 中将大文本(字符串)作为 REST 服务的响应发送到 REST 客户端?

java - 在事先未知的 SerializedName 上使用 Gson/Retrofit

perl - 如何使用 Perl 和 CAM::PDF 读取 PDF 文档属性?

git - 为不在 Git Bash 中的 git 配置 SSH key

linux - 从网络外部进行 SSH 访问

JavaFX 从不同类启动应用程序

algorithm - 在这种情况下如何实现树状数据结构

perl - 为什么每个 perl 包末尾的 1 ?

c# - 如何在 Windows 7 上使用 MonoDevelop 的 SCP 发布 ASP.NET 应用程序