私は、ミニクラフトサーバを含むドッカー画像を持っています。 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をリダイレクトしましたそれは私にとってはとても簡単ですが、私はそれを実現させることはできません。どんな助けでも大歓迎です。