以下の内容はhttps://end0tknr.hateblo.jp/entry/20130512/1368363336より取得しました。


mod_perl + Net::OpenSSH で child process STDIN is not a real system file handle

mod_perl環境下で ssh, scpする為に Net::OpenSSH をnew()すると、見慣れないerrorが発生。

my $ssh = Net::OpenSSH->new('localhost',
			    user  =>'endo',
			    passwd=>'ないしょ');

↑こう書くと、apacheerror_logに次のようなエラー。

An error occurred at preview.pl.  child process STDIN is not a real system file handle at 〜

http://www.perlmonks.org/?node_id=830581
↑このurlによれば、mod_perlが標準入力を握っていることが原因みたい。なので、つぎのように修正することで解決。

my $DUMMY_STDIN_OUT = '/dev/null';
open(my $stdin_fh,$DUMMY_STDIN_OUT)  or die "can't open $DUMMY_STDIN_OUT $!";
open(my $stdout_fh,$DUMMY_STDIN_OUT) or die "can't open $DUMMY_STDIN_OUT $!";
my $ssh = Net::OpenSSH->new('localhost',
		            user   =>'endo',
			    passwd =>'ないしょ',
			    default_stdin_fh => $stdin_fh,
			    default_stdout_fh => $stdin_fh);

openしたファイルハンドルをcloseすると、Log4perlでログを書けなくなったので、closeはomitしています




以上の内容はhttps://end0tknr.hateblo.jp/entry/20130512/1368363336より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14