4

nodejsで子プロセスを使用して、ローカルマシンでTomcatサーバーを起動しようとしています。これは、子プロセスがどのように機能するかを理解するのに役立ち、私が取り組んでいるプロジェクトに役立つ実験です。http://nodejs.org/api/child_process.htmlのドキュメントを見てきましたが、実際にこれを行う際に少し問題があります。

私がやろうとしているのは、ローカルのどこかでnodejsを実行することです。どこかをクリックすると(またはページを起動すると)、ページでTomcatサーバーが実行され、起動していることを確認してから、localhost:8080ウェルカムページをロードします。ここでnodejsAPIが呼び出されているページを閉じると、tomcatをシャットダウンする必要があります(この部分は今のところ必要ありませんが、実験の一部にすぎません)。ありがとう!

4

1 に答える 1

2

このnpmモジュールShelljsを見てください

ShellJS-Node.jsビルドステータス用のUnixシェルコマンド

ShellJSは、Node.js API上にUnixシェルコマンドを移植可能な(Windows / Linux / OS X)実装です。これを使用して、使い慣れた強力なコマンドを維持しながら、シェルスクリプトのUnixへの依存を排除​​できます。また、グローバルにインストールして、外部のNodeプロジェクトから実行できるようにすることもできます。これらの厄介なBashスクリプトに別れを告げてください。

ShellJSは多くの関連プロジェクトでテストされています

スクリプトを呼び出すことができるので、Tomcatのスクリプトを制御して開始およびシャットダウンし、実験を続けることができます:)

ShellJSには次のオプションがあります。

exec(コマンド[、オプション] [、コールバック])

使用可能なオプション(デフォルトではすべてfalse):

async: Asynchronous execution. Defaults to true if a callback is provided.
silent: Do not echo program output to console.

例:

var version = exec('node --version'、{silent:true})。output;

var child = exec('some_long_running_process'、{async:true}); child.stdout.on('data'、function(data){/*...データを使って何かをする...*/});

exec('some_long_running_process'、function(code、output){
console.log('終了コード:'、コード); console.log('プログラム出力:'、出力);});

特に指定がない限り、指定されたコマンドを同期的に実行します。同期モードの場合、プログラムの出力(stdout + stderr)とその終了コードを含むオブジェクト{code:...、output:...}を返します。それ以外の場合は、子プロセスオブジェクトを返し、コールバックは引数(コード、出力)を取得します。

注:存続期間の長いプロセスの場合、現在の同期実装は大量のCPUを使用するため、exec()を非同期で実行することをお勧めします。これはすぐに修正されるはずです。

于 2013-03-09T02:11:04.750 に答える