2013-01-13 6 views
5

は、私はSSHを介して、このように実行nodejsアプリケーションを持っています。

明らかに、私はSSHセッションを常に開いているわけではありません。

私が見つけたことは、ときどき私のアプリケーションが、ページをサーバ化しない状態になることがあるということです。これは、アプリケーション自体に関係するかもしれません。あるいは、おそらくは接続が不十分なSSHセッションに関連するかもしれません。

いずれかの方法は、単にSSHにログインし、実行している:

$ tmux attach 

、ペインにフォーカスを与えることは、再びすべてが応答になります。


私はnode.jsの全体がすべてが非ブロックであると思っていました。そして、ここで何が起こっているのですか?

+0

うーん、何のOS? – Brad

+0

@ブラッド:Ubuntu 12.04.1 – Eric

+0

@Ericあなたの記述からすべてがうまくいくはずだから、コードには問題があります。 – loganfsmyth

答えて

2

ペインがコピーモードの場合、tmuxは、そのttyから読み取られません。 ttyで "in"を実行しているプログラムが出力を生成し続けると、OSのttyバッファがいっぱいになり、書き込みプロセス/スレッドがブロックされます。私はNode.jsの内部を知らないが、stdout/stderrへの書き込みをブロックすることを期待していないかもしれません:console functionsはコールバックを持っていないようで、実際にブロックしているかもしれません。

したがって、SSH接続が切断されたときに実行中のウィンドウがコピーモードになっていた場合、Node.jsは非常にうまくブロックされてしまう可能性があります。

あなたは、ノンブロッキングロギングを確保するために必要がある場合、あなたは、ファイルへのあなたのstdoutとstderrをリダイレクト(またはティー)にしたいと以前のログを表示するlessのようなものを使用することがありますが(tmuxのを避けのコピーモードブロックする可能性があるため)。

たぶん、このような何か:

# Redirect stdout/stderr to a file, running Node.js in the background. 
# Start a "less +F" on the log so that we immediately have a "tail" running. 
node app.js >>app.log 2>&1 & less +F app.log 

それとも

# This pane will act as a 'tail -f', but do not use copy-mode here. 
# Instead, run e.g. 'less app.log' in another pane to review prior logs. 
node app.js 2>&1 | tee -a app.log 

または、ロギングライブラリを使用している場合、それはあなたが自動的にファイルへの書き込みに使用できる何かを持っているかもしれません。

関連する問題

 関連する問題