2016-12-14 2 views
0

私はシェルスクリプトの初心者です。シェルスクリプト内で2つのノードプロセスを実行する

私はノードjsプログラムと、mongoDBを使用するAPIを持っています。 APIはExpressを使用してルートとスキーマにリンクされています。APIサーバーを起動するために必要な操作はすべて実行されます。node app.js

ただし、ユーザーが追加する特定のURLをポーリングするメインプログラムもありますポーリング要求から返されたデータをデータベースに保存します。これは毎秒 'x'秒ごとに発生するので、ポーリングが発生すると常にmongo接続を開き、終了するとすぐに閉じます。このプログラムを実行するには、実行する必要がありますnode main.js

app.jsは、プログラムの実行時にmongo接続を一度開こうとしているようです。

私の質問は何ですか?私は一緒に両方のプロセスを開始し、必要なときにそれらを終了することができるようにbashスクリプトを書くことによってどうにかしてそれらをリンクできますか?

私はこれをやってみました:

#!/usr/bin/bash 
# declare STRING variable 
STRING="Starting node processes" 
#print variable on a screen 
echo $STRING 

node misrepo/app.js 
node misrepo/main.js 

しかし、これは唯一のapp.jsを開始し、私のmain.jsアプリケーションを実行しません。

私はちょうどGoogleの助けからこれを把握しようとしているどんな助けてもらえます!

#!/usr/bin/bash 
# declare STRING variable 
STRING="Starting node processes" 
#print variable on a screen 
echo $STRING 

node misrepo/app.js & node misrepo/main.js 

これはmisrepo/main.jsmisrepo/app.jsでノードを起動し、すぐにノードの別のインスタンスになります。あなたは次の操作を行うことができ、並列に二つのプログラムを起動するには

答えて

0

。あなたの例では スクリプトnode misrepo/app.js終了の実行までのブロックだけにしてマルクスによってnode misrepo/main.js

1

良い答えを開始し、

はそれにもかかわらず、私は少しコメントを追加する必要があるとによる評判の不足のために、私が作成する必要があります回答。

両方のプロセスをバックグラウンドで開始し(&によって引き起こされる)、両方のプロセスが終了するのを待つ方が良いです。それ以外の場合は、2つ目のコマンドを待つ間だけ両方のプロセスが終了したようです。両方のコマンドの出力処理に問題が生じる可能性があります。

#!/usr/bin/bash 
# declare STRING variable 
STRING="Starting node processes" 
#print variable on a screen 
echo $STRING 

node misrepo/app.js& 
node misrepo/main.js& 

# wait until both background processes finish 
wait 

ベスト、 フランク

+0

しかし、APIは終了しませんか? – deeveeABC

+0

どちらもバックグラウンドで実行されます...したがって、予期しないことが起こらず、両方のプロセスが終了する限り、永遠に待つでしょう。プロセスの1つを終了させたい場合は、 'kill'コマンドと' PID'コマンドを組み合わせて 'wait'文をスキップしてください。 –

0

サービス管理はトリッキーであり、具体的には、それのために構築されたツールがあります。あなたがbashで車輪を再構築しないのが最善です。

foreverまたはpm2を使用してサービスを管理します。

npm install forever -g 
forever start misrepo/app.js 

あなたpackage.json

{ 
    "scripts": { 
    "start": "forever start misrepo/app.js && forever start misrepo/main.js" 
    } 
} 

scriptsセクションであなたはまた、これらのコマンド(またはスクリプト)を含めることができ、あなたのスクリプトで

#!/bin/sh 
forever start misrepo/app.js 
forever start misrepo/main.js 

を入れその後npm startアプリを起動します。 stopおよびrestartも標準です。

サーバーでこれを行う場合は、ネイティブサービスマネージャを使用して各サービスを管理します。あなたがLinuxを使用している場合、これはsystemdになる可能性があります。

関連する問題