我遇到了问题,我试图执行在另一台服务器上分配的PERL脚本。如果我在Linux Shell中执行该命令,脚本将正确运行。如果我执行脚本在apache Tomcat的同一服务器中分配perl脚本,运行正常,但是当我尝试通过Tomcat通过ssh执行脚本时,总是以错误代码255结束。
Perl脚本:
void clicked()
{
TableId promptTableId;
Dialog d;
DialogField df;
void createLine(DatabaseLogType logType)
{
DatabaseLog.logTable = promptTableId;
DatabaseLog.LogType = logType;
DatabaseLog.insert();
}
d = new Dialog("Enter table name");
df = d.addField(extendedTypeStr(TableName));
d.parmIsModal(true);
if (d.run())
{
promptTableId = tableName2id(df.value());
if (!promptTableId)
{
throw error(strFmt("Table %1 does not exists", df.value()));
}
ttsBegin;
createLine(DatabaseLogType::Insert);
createLine(DatabaseLogType::Update);
createLine(DatabaseLogType::Delete);
ttsCommit;
SysFlushDatabaseLogSetup::main();
info(strFmt("For table %1 (%2) records are created: %3, %4, %5."
, tableId2name(promptTableId)
, tableId2pname(promptTableId)
, DatabaseLogType::Insert
, DatabaseLogType::Update
, DatabaseLogType::Delete
));
}
super();
}
现在,这是Java文件中的代码
#!/usr/bin/perl
my $sleeptime = 10;
sleep($sleeptime);
my $argumento=$ARGV[0];
if ( $argumento eq "A" ) {
exit 0;
} else {
exit 192;
}
如果我将命令变量更改为
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");
}
返回代码正常(0或192)
必须远程执行,因此我无法将真正的PERL复制到tomcat目录。我做的只是为了测试。
答案 0 :(得分: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";