2016-11-27 32 views
0

私は一般的な機能であるか、プロセスを再起動する機能があるかどうかを知りたいです。 process.disconnect()と似ていますが、この場合、関数が呼び出されるとスクリプトが再起動されます。Node.jsプロセス再開

+2

いいえ、処理の外側から行う必要はありません。あなたは単に 'process.exit'することができます。 –

答えて

3

一般的に、プロセス・マネージャーは、など永遠にMONIT、PM2、nodemon、しかし

として(自動的に)再起動プロセスに使用されている、あなたできただけで外れた子プロセスを生成することにより、プロセス自体から再起動これは一定の時間待機してから同じスクリプトを実行します。これを、スリープ状態と現在のコマンド行の2つのコマンドの組み合わせとして行うこともできますし、単純にスリープ状態をスクリプトに組み込むこともできます。後者の例:Windowsでは

var spawn = require('child_process').spawn; 

(function main() { 

    if (process.env.process_restarting) { 
    delete process.env.process_restarting; 
    // Give old process one second to shut down before continuing ... 
    setTimeout(main, 1000); 
    return; 
    } 

    // ... 

    // Restart process ... 
    spawn(process.argv[0], process.argv.slice(1), { 
    env: { process_restarting: 1 }, 
    stdio: 'ignore' 
    }).unref(); 
})(); 

、あなたはしかし、あなたのspawn()構成オブジェクトにdetached: trueを追加する必要があります。 * nixでは、これは通常は必要ありません。

ただし、元のプロセスがフォアグラウンドで開始された場合、再起動されたプロセスはターミナルにアクセスできなくなります。

また、指定した時間に多くても1つのプロセスでのみ使用できるリソースがスクリプトで使用されていない場合は、遅延とprocess.envのチェックを省略できます。

最後の注意:お使いのプロセス等C++アサーション、V8のバグを、トリガ、によるメモリの枯渇に、異常にクラッシュした場合、あなたのプロセスは明らかに(あなたが'unhandledException'イベントハンドラがprocessのために設定されている場合でも、再起動しません。 )。これらの状況を説明するには、プロセスを再起動するための何らかの外部メカニズムが必要です。

+0

余分なカルマ「detached:true」を含むポイント!ありがとう、私はそれについて知らなかった! – amenthes

0

スクリプトをシステムデーモン(例えばupstartやsystemdなど)として起動する場合、ちょうどprocess.exit()で、新しいプロセスを再作成することができます。

+0

'process.exit()'はスクリプトを閉じるだけです。コマンドを使ってスクリプトを再起動する必要があります。 – Maxsanc1

関連する問題