首页 > 解决方案 > ps 在命令行上工作,但不在脚本中

问题描述

我有一个简单的脚本,可以使用 ps 检查某个进程的进程 ID。当我直接在命令行上运行它时,它工作正常,但当我在脚本中运行它时却不行。我究竟做错了什么?

这工作正常:

ps auwx | grep elasticsearch | grep -v grep | grep user | awk '{print $2}' | tail -1

在脚本中,它不会:

#!/bin/bash

#Setting ES Heap to 50GB
ES_HEAP_SIZE="50g"

#Finding dump file to be deleted
FILE_ID=$(ps auwx | grep elasticsearch | grep -v grep | grep user | awk '{print $2}' | tail -1)
FILE_NAME="java_pid$FILE_ID.hprof"

echo "Elasticsearch pid: $FILE_ID"
echo "Dump file name if it exists: $FILE_NAME. Checking now."

if [ -s $FILE_NAME ]
then
  rm $FILE_NAME
  kill -9 $FILE_ID

  #Starting elasticsearch daemon
  /data/elasticsearch-1.4.4/bin/elasticsearch -d
else   
  echo "All good. Dump file $FILE_NAME does not exist."
fi

标签: bashshell

解决方案


个人的烦恼:为什么你的管道中有六个处决,而两个处决可以处理你需要的一切?

ps auwx | awk '/elasticsearch/ && /user/ { x=$2 } END{ print x; }'

顺便说一句,你想要 PID?因为看起来您正在阅读 PPID。

希望有帮助。


推荐阅读