2016-12-19 2 views
-3

NodeJSサーバーを特定のユーザーとしてPerlでforeverを使用して起動しようとしています。Perlでこのコマンドを実行する正しい方法は何ですか?エラーは返されません。

これはPerlで初めてプログラミングしたので、解決するのは非常に簡単です。私は多くの例を見てきましたが、私が見ているのは、関数systemexecに関する矛盾した情報です。

私のPerlモジュールファイルでは、systemexecの両方を試しました。

sub start_server { 
    my ($result) = @_; 

    my $return = system("forever --uid nodejs-34534 -a start /path/to/server.js"); 

    $result->data($return); 

    return 1; 
} 

がどのように私はPerlでコマンドforever --uid nodejs-34534 -a start /path/to/server.jsを実行する必要があります。system使用

?何も返さないか、エラーを表示したり、他のコマンドを実行したりすると、たとえばecho "$user"が正常に動作し、Perlスクリプトを実行しているユーザーの現在のユーザー名が返されます。

アップデート:私は必要な出力を得るために、間違った機能を使用していた右方向へのポインタの多い以下の多くのコメントの後

。配列変数とバッククォートを使用していたはずです。@ zdimのおかげでそれを指摘できました。これは、実行されるコマンドの出力が見えないという問題を解決しました。

は、バッククォートを用いて補正:

sub start_server { 
    my ($result) = @_; 

    my @output = `forever --uid nodejs-34534 -a start /path/to/server.js`; 

    $result->data(\@output); 

    return 1; 
} 

を次に別の問題が明るみに出ました。コマンドが呼び出されていたが、出力が受信された後で停止していたこと。 @Borodinは、必要なものだけをスクリプトとモジュールとして作成し、それが動作するかどうかテストする必要があると述べました。そのようにして、実行されたコマンドをテストすることは生きています。だから私はそれが生き残っていない問題は、私が拡張しようとしているPerl APIにあることを知っています。

私が拡張しているPerl APIがプロセスを停止させる理由を理解する方法はありますか?

+0

コメントは、拡張された議論のためではありません。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/130997/discussion-on-question-by-jjb-what-is-the-correct-way-to-run-this-コマンドイン・p)。 – Flexo

答えて

1

変更するには、変数内のコマンドの出力を保存したいバッククォートとシステム:

my $return = `forever --uid nodejs-34534 -a start server.js`; 

systembackticksを理解するために、これを参照してください。 https://stackoverflow.com/a/800105/4248931

関連する問題