我遇到问题,我正在尝试执行分配在另一台服务器上的 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/