web-dev-qa-db-ja.com

特定のPIDを取得してファイルに保存する

マシンで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
4
GeekyDaddy

リダイレクションinside awkを配置する場合は、ファイル名を引用符で囲む必要があります。それ以外の場合、awkはそれをリテラル文字列ではなく変数として扱います。

... | awk '{print $1 > "world2.pid"}'

ただし、awkに標準出力に書き込み、リダイレクトをthatつまり.

... | awk '{print $1}' > world2.pid

または、タスク全体でpgrepを使用することを検討することもできます。何かのようなもの

pgrep -f 'World2' > world2.pid
9
steeldriver

> 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
7
Jacob Vlijm