2016-07-26 9 views
1

Node.Jsスクリプトを何らかのエラー処理なしですばやく作成しましたが、エラーが発生したときにはしばらくしてクラッシュします。不注意だが効率的。NodeJs:所定の時間スクリプトを実行していますか?

これを実行し続けるために、npmは永遠に使用でき、永遠に再起動します。ファンシー。

ここで、12時間(一部のモジュール/コードをクラッシュ後に再起動するように)実行してから完全に停止したいとします。

このような動作を実現する簡単な方法はありますか?

+1

"不注意が、効率的"。これが問題です。私はそれを高速だが役に立たないと読む。 – undefined

+0

;-) @ Vohuman:私は反対することを願います。このスクリプトは個人的な使用のためのアマチュアボットです。それがクラッシュすると、それだけで私を妨げるだけで、それほど多くはありません。永久にすぐに再起動すると、クラッシュは効率に全く影響しません。私はまだそれを開発しており、プロセスでNodeを適切に使用する方法を学びます。まれなエラー処理が最後に残されています。さらに、あなたは紹介を取り除くことができます(笑いを目的としています)。質問はまだまだ続きます:-) –

答えて

3

node.jsプロセスを12時間後に停止させたい場合は、今から12時間のタイマーを設定してprocess.exit()に電話をかけることができます。

setTimeout(function() { 
    process.exit(0); 
}, 1000 * 60 * 60 * 12); 

あなたは永遠のようなシステムを使用したいが、あなたの両方が12時間でプログラムを停止したいと永遠にそれを再起動したくない場合は、あなただけのクロンジョブを実行することができます、12時間後に実行するforever stop /somepath/yourscript.js


P.S.何度も自分自身でクラッシュするシステムは、「不注意だが効率的」なのではない。それはすぐに行くことができるかもしれませんが、それはまた緩やかで危険であり、決して長期的にコード化する効率的な方法ではありません。あなたのコードに焼き付けたtechnical debtをすべて削除することをお勧めします。

私が長年開発チームを運営してきたことは、「最初に正しいことを行うには十分な時間がないのですが、それを正しく実行するには十分な時間があります」と言いました。

+0

不注意に対するさまざまな解決法と助言を含む完全な答え。ありがとう。 「私は最近、非同期プログラミングの仕組みを理解していたアマチュア学習ノードです。私は自分のプロジェクトを構築しながら前のコードを改善し続けています。私の人生の主な問題は、あなたが私の言ったことを教えてくれますか? ;-)この投稿は私のための治療の一種です!乾杯! –

+0

@KLôN - あなたがそれをしている間、あなたは[Minimum Viable Product](https://en.wikipedia.org/wiki/Minimum_viable_product)について読むことができますが、あなたのコードが悪いとは言えません設計され、バグ満載です。明らかに学習しているのであれば、学習する必要がありますが、学習の非常に重要な部分は、エラー状態を処理する堅牢で安定したコードを作成する方法を学習することです。自動再起動は、コードをクラッシュさせないようにする方法を学ぶための代替手段であると考えるべきではありません。 – jfriend00

+0

私はもっと同意できませんでした。完全に正直なところ、私は絶対に必要なときにエラーを処理し始めました。私はすべての可能性の結果をカバーするために学んだことを使うつもりです。 Thxあなたの時間とアドバイスを! –

2

Linuxの "at"コマンドを使用して、相対タイマーを設定できます。クラッシュした場合、Foreverはスクリプトの再起動を処理します。

  1. は、スクリプト

    forever start /path/yourscript.js

  2. スケジュール停止コマンドを起動し

    echo 'forever stop /path/yourscript.js' | at now + 12 hours

-

"at" - exをインストールする必要があることに注意してください。あなたはまた、シェルスクリプトを実行する「で」スケジュールすることができます(apt-get install at

注:

  • は、この行を含むファイル「stopscript.sh」を作成します:forever stop /path/yourscript.js
  • はジョブ「で」に設定しますat now +12 hours -f ~/stopscript.sh
1

使用clusterモジュールでは、エラーが発生した場合にクラスタを再起動します。

マスターに、単純にこのようなコードを実行します。

setTimeout(function() { 
    process.exit(0); 
}, 12 * 3600 * 1000); 
+0

あなたの計算は12時間後に 'setTimeout()'をどうやってやっているのかちょっと分かりません。あなたは1000倍になっています。 – jfriend00

+0

@ jfriend00指摘に感謝します。 – Calvinxiao

2

あなたはUNIXyオペレーティングシステムを使用している場合は、与えられた時間に永遠に殺すためにatコマンドを使用することができます。

例:

$ echo 'forever stop whatever.js' | at now + 12 hours 
関連する問題