2017-05-20 6 views
0

私は、ミニクラフトサーバを含むドッカー画像を持っています。 minecraftサーバーはSTDINからの入力を受け取りますので、java -jar server.jarでサーバーを起動した後、コンソールに入力することでコマンドを入力できます(サーバーを停止するなど)。ドッキングウィンドウがSIGTERMを送信するときに、それが正常に終了することができるようにJavaの実行ファイルが、プロセスを引き継ぎFIFOを介してバックグラウンドで実行されるプログラムのSTDINへのアクセスを維持する

#!/bin/sh 

.. some initialization .. 

exec java -Xmx$RAM -Xms$RAM -jar server.jar 

この方法:

理想的には私はこの何かに見えるシェルスクリプトでサーバを起動します。

人工のSTDINを残しておき、別のスクリプトを使ってサーバーにコマンドを実行できるようにするときに問題が発生します。これを行うには、私はそうのようなコンソールを表しFIFO作っ:

rm -f console; mkfifo console 

を私はかかわらず、プロセスにこの方法をこのFIFOをリダイレクトすることができますかどうかはわかりません。私はそう

while true; do cat console; done 

のようにwhileループでcatを使用して、FIFOを読み取って、このような何かをやっについて考えている:

while true; do cat console; done | exec java -jar server.jar 

またはこのような何か:については

exec java -jar server.jar < <(while true; do cat console; done) 

後者は、私は残念なことに私を与えるbash: pipe data into an exec'd commandを見たsyntax error: unexpected redirection

私もこれを試してみた:

それは始めている間、サーバーを凍結するようだ
while true; do cat console; done >&0 & 

exec java -jar server.jar 

私はこのすべてがうまくいかない理由は知らないし、どうすればそれを動作させることができるのかわかりません。私が達成したいものの明確にする

  • は、Java(サーバー)
  • メインプロセス上を取るを持っているが、サーバ

のSTDINにFIFOをリダイレクトしましたそれは私にとってはとても簡単ですが、私はそれを実現させることはできません。どんな助けでも大歓迎です。

答えて

0

< <(command)の構文は/ bin/shではサポートされていませんが、/ bin/bashではサポートされています。

ものに切り替えた後、私の最後の行は次のとおりです。あなたはちょうどあなたがより多くの依存関係をインストールする必要があることを受け入れなければならない

時には
exec java -jar server.jar < <(tail -f console) 

..

関連する問題