好的,所以我有一个ruby脚本,它从FM Server中获取一些数据并返回一个元组。我不得不这样做,因为我知道没有好的perl FM模块。
[test.pl]
$ret = `ruby /root/rfm-query.rb $cid`; @extens = split(/,/, $ret, 2); print "DIAL SIP/$extens[0]";
因此,当我运行它时,它将按预期打印“DIAL SIP / 215”,但是当在Asterisk AGI脚本中使用相同的代码并使用$ extens [0]时,它总是不返回任何内容。
#!/usr/bin/env perl use Asterisk::AGI; $|=1; $AGI = new Asterisk::AGI; %input = $AGI->ReadParse(); $cid = substr $input{'callerid'}, 1; $cid =~ s/\+//g; $ret = `ruby /root/rfm-query.rb $cid`; #rets nothing @extens = split(/,/, $ret, 2); $AGI->exec("DIAL SIP/$extens[0]");
为什么它在测试脚本中有效但在AGI中无效?
答案 0 :(得分:2)
我不确定Asterix AGI脚本是什么,但是如果它像CGI一样,你的代码由服务器运行,那么它可能像你一样以不同的用户身份运行。希望它是而不是root,它可能无法读取/root/rfm-query.rb
。
您可以尝试打开并打印文件进行阅读来检查。
my $rfm_query_file = "/root/rfm-query.rb";
open my $fh, "<", $rfm_query_file or die "Cant open $rfm_query_file: $!";
(如果您正在以root身份开发和测试代码,也会感到羞耻。)