Obtenha o PID específico e salve no arquivo

4

Estou executando dois servidores de minecraft na minha máquina. Eu quero saber o que o pid é de um único servidor mc que está rodando e colocá-lo em arquivo para que eu possa matá-lo mais tarde. Então, para este exemplo eu só quero saber o que o PID é do World2 nada mais e salvá-lo em arquivo.

Quando executo um comando

ps h -o pid,cmd -u minecraft 

Eu obtenho os seguintes resultados

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

Eu então cano para o grep usando este comando

grep World2

Aqui é onde eu entro em dificuldades, então canso para obter um único resultado de volta. Eu tentei o seguinte, mas simplesmente não consigo entender.

awk '{print  > world2.pid}'

Então meu comando completo é:

ps h -o pid,cmd -u minecraft | grep World2 | awk '{print  > world2.pid}'

Eu recebo o seguinte erro:

awk: cmd. line:1: {print  > world2.pid}
awk: cmd. line:1:                 ^ syntax error
    
por GeekyDaddy 05.06.2015 / 14:00

2 respostas

9

Se você quiser colocar o redirecionamento dentro awk, você precisa colocar o nome do arquivo entre aspas - caso contrário, awk o tratará como uma variável ao invés de uma string literal:

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

No entanto, seria mais convencional deixar o awk gravar na saída padrão e redirecionar esse , ou seja,

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

Alternativamente, você pode querer usar pgrep para toda a tarefa, por exemplo algo como

pgrep -f 'World2' > world2.pid
    
por steeldriver 05.06.2015 / 14:11
7

Se você colocar o > world2.pid após awk '{print }' , isso deve funcionar:

ps h -o pid,cmd -u minecraft | grep World2 | awk '{print }' > world2.pid

Em seguida, a saída de:

ps h -o pid,cmd -u minecraft | grep World2 | awk '{print }'

é escrito para:

world2.pid

OR

Como sugerido (obrigado) por @ JonathanLeffler, você pode salvar o uso de grep :

ps h -o pid,cmd -u minecraft | awk '/World2/ {print }' > world2.pid
    
por Jacob Vlijm 05.06.2015 / 14:13

Tags