所以我有一個docker鏡像,其中包含一個minecraft服務器。一個Minecraft服務器接受來自STDIN的輸入,因此在啓動服務器後,我可以通過在控制檯中鍵入它來提供命令(例如停止服務器)。通過FIFO保持訪問STDIN程序在後臺運行
理想我想啓動服務器的shell腳本,看起來這樣的:
#!/bin/sh
.. some initialization ..
exec java -Xmx$RAM -Xms$RAM -jar server.jar
這樣,Java可執行接管過程,以便它可以當搬運工發送SIGTERM
被正常終止。
問題出現在我想保留一個人造STDIN
時,它允許我通過另一個腳本在服務器上執行命令。要做到這一點我做了一個表示像這樣的控制檯FIFO:
rm -f console; mkfifo console
我不知道我怎麼可以重定向這個FIFO
到過程,雖然這種方式。我在讀使用cat
先進先出在while循環,像這樣
while true; do cat console; done
而且想過做這樣的事情:
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(服務器)接管主進程
- 有一個FIFO重定向到標準輸入服務器的
這聽起來對我來說很簡單,但我無法做到這一點。任何幫助將不勝感激。