2016-04-25 135 views
0

我遇到了问题,我试图执行在另一台服务器上分配的PERL脚本。如果我在Linux Shell中执行该命令,该脚本将正确运行。如果我执行该脚本中的Apache Tomcat在同一台服务器分配的Perl脚本,运行正常,但是当我试图通过SSH的Tomcat执行脚本,总是错误代码结束255从Java执行Perl脚本tomcat返回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 [email protected] '/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目录。我确实是为了测试而做的。

+0

请问,当你直接输入(不带Tomcat)的ssh命令运行?你有没有收到任何错误信息?是否为Tomcat用户设置了无密码SSH? '/ var/www'中的脚本是否也存在于你登录的服务器上? – Thilo

+0

当我运行shell Linux时,它运行完美。如果我用“A”参数运行返回0,或者当我与其他 – Guille

回答

1

您是否尝试了Tomcat服务器作为tomcat用户的SSH调用,例如:

ssh [email protected] '/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"; 
+1

运行时返回0 ...我只是一个(http://i2.kym-cdn.com/entries/icons/original/000/010/ 277/069.jpg)。我刚刚为开发者用户创建了一个rsa,但是对于tomcat用户(他们执行.class文件...) 现在,在为tomcat用户创建RSA之后,它就像一个魅力 – Guille