マシンで2つのMinecraftサーバーを実行しています。実行中の単一のmcサーバーのpidが何であるかを知り、後でそれを強制終了できるようにファイルに入れたいと思います。したがって、この例では、World2のPIDが何であるかだけを知り、ファイルに保存します。
コマンドを実行するとき
ps h -o pid,cmd -u minecraft
次の結果が得られます
31416 /usr/lib/jvm/Java-8-Oracle/jre/bin/Java -Xmx2G -Xms1G -jar /data/mc-server/World1/minecraft_server.jar nogui
31706 /usr/lib/jvm/Java-8-Oracle/jre/bin/Java -Xmx6G -Xms4G -jar /data/mc-server/World2/craftbukkit.jar nogui
次に、このコマンドを使用してgrepにパイプします
grep World2
これは私が困難に陥るところです、そして私は単一の結果を得るためにパイプします。以下を試してみましたが、取得できません。
awk '{print $1 > world2.pid}'
したがって、私の完全なコマンドは次のとおりです。
ps h -o pid,cmd -u minecraft | grep World2 | awk '{print $1 > world2.pid}'
次のエラーが表示されます。
awk: cmd. line:1: {print $1 > world2.pid}
awk: cmd. line:1: ^ syntax error
リダイレクションinside awkを配置する場合は、ファイル名を引用符で囲む必要があります。それ以外の場合、awkはそれをリテラル文字列ではなく変数として扱います。
... | awk '{print $1 > "world2.pid"}'
ただし、awkに標準出力に書き込み、リダイレクトをthatつまり.
... | awk '{print $1}' > world2.pid
または、タスク全体でpgrep
を使用することを検討することもできます。何かのようなもの
pgrep -f 'World2' > world2.pid
> world2.pid
の後にawk '{print $1}'
を置くと、動作するはずです:
ps h -o pid,cmd -u minecraft | grep World2 | awk '{print $1}' > world2.pid
次に、出力:
ps h -o pid,cmd -u minecraft | grep World2 | awk '{print $1}'
に書かれています:
world2.pid
または
@JonathanLefflerが示唆したように(ありがとう)、grep
の使用を節約できます。
ps h -o pid,cmd -u minecraft | awk '/World2/ {print $1}' > world2.pid