2012-04-11 4 views
0

nginix/FCGIによって呼び出されたperlスクリプトで、ssh [email protected] <command>を実行するとtiがリモートマシン に接続します。私はスタンドアロンとして期待を使用してスクリプトを実行すると、それは動作します(このコードは非常に一般的で、私はそれにバグを期待していません)。 。 これはFCGIがおそらくプロセスが期待通りに生まれることを許さないと私に信じさせてくれます。私は確信していません。グーグルは今まで役に立たなかった。すべての入力が評価されましたnginx/FCGIによって呼び出されたperlスクリプトのexpectを使用して子プロセスを生成することができます

答えて

2

Expect.pmがSTDINをダンプしようとしていて、FCGI.pmがその操作をサポートしていないため、FCGI.pmの次のリリースでは、Not a GLOB reference at /path/to/perl/lib/...よりも明確なエラーメッセージが表示されます。

解決策は、プロセス間通信を行うときに、グローバル:STDIN、STDOUT、STDERRおよび%ENVの使用を避けることです。

my ($stdin, $stdout, $stderr, $env) = 
    (IO::Handle->new, IO::Handle->new, IO::Handle->new, {}); 

my $r = FCGI::Request($stdin, $stdout, $stderr, $env) 
    or die "Couldn't create FCGI request: '$!'"; 

while ($r->Accept >= 0) { 
    my $exp = Expect->spawn('ssh', '[email protected]') 
     or die "Cannot spawn command: $!\n"; 
    print $stdout "OK\n"; 
} 
関連する問題