Я использую два сервера Minecraft на моей машине. Я хочу знать, что представляет собой pid отдельного mc-сервера, который работает, и поместить его в файл, чтобы я мог убить его позже. Поэтому для этого примера я хочу только узнать, что такое PID для World2, и сохранить его в файл.
Когда я выполняю команду
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
Если Вы хотите поместить перенаправление внутренний awk, необходимо поместить имя файла в кавычки - иначе, awk рассматривает его как переменную, а не литеральную строку:
... | awk '{print $1 > "world2.pid"}'
Однако это было бы более стандартным, чтобы позволить awk записать в стандартный вывод и перенаправление , что т.е.
... | 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