web-dev-qa-db-ja.com

GNU Screenにログファイルをフラッシュさせるにはどうすればよいですか?

私は 画面 このように使用しています:

screen -L -dm -S session1 -c "./game_server -options"

ゲームサーバーをラップアラウンドします。私はそれらの出力をファイルに記録し、次の方法で入力を送信できます。

screen -r session1 -p0 -X "stuff \"this into input^M\""

ログファイルのフラッシュ間のタイムアウトは、構成ファイルで指定できます(私の場合は10秒)。

私が抱えている問題は、画面にログファイルへの出力を強制的にフラッシュできないことです。たとえば、「status」コマンドをゲームサーバーに送信した後、ゲームサーバーはいくつかの情報を出力しますが、それをログファイルに追加するには少なくとも10秒かかります。

私は送信しようとしました:

screen -r session1 -p0 -X "logfile flush 1"

しかし、それはそれに反応しません。私もフラッシュ0を試しましたが運がありませんでした。

常に1秒のタイムアウトでログに記録したくありません。コマンドを受け取った後にのみ本当に必要になります。結局のところ、セッションはゲームサーバーを実行しているので、ここではパフォーマンスについて偏執的であることに注意してください。

画面にログファイルへの出力を強制的にフラッシュするにはどうすればよいですか?画面以外で、おそらくFIFOを使用して、必要なこと(ファイルへのログ出力と入力へのコマンドの送信)を行う方法はありますか?

1
Gipsy King

これを試して:

 screen -r session1-Xコロン "logfile flush 1 ^ M" 

logfile flush 1は実際には画面コマンドではありませんが、colonは画面コマンドです。次に渡すのは、引用する必要のある引数です。最後の^ Mは実際にはCtrl-Mである必要があります。 Ctrl-Vの後にCtrl-Mを押すと、通常、実際のCtrl-Mを入力するためのトリックが実行されます。

2
mark

私はあなたとまったく同じ必要がありました。 Logfile flushは画面に送信する有効なコマンドですが、引用符で囲む必要はありません。また、0に設定してインスタントフラッシュすることもできます。

行をに変更します

screen -r session1 -p0 -X logfile flush 0

ただし、ログファイルからの読み取りが完了したら、必ず元に戻してください。

screen -r session1 -p0 -X logfile flush 10

デフォルトは10秒ですが、適切と思われるものに設定できます。

0
AsherMaximum