ps在命令行上工作,但不在脚本中工作

时间:2019-04-18 17:39:53

标签: bash shell

我有一个简单的脚本,可以使用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

1 个答案:

答案 0 :(得分:0)

个人宠儿:为什么您的管道中有六个执行,而两个执行了您所需的一切?

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

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

希望有帮助。