bash - 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
解决方案
个人的烦恼:为什么你的管道中有六个处决,而两个处决可以处理你需要的一切?
ps auwx | awk '/elasticsearch/ && /user/ { x=$2 } END{ print x; }'
顺便说一句,你想要 PID?因为看起来您正在阅读 PPID。
希望有帮助。
推荐阅读
- python - pyopengl 上的 gldrawpixels 没有画任何东西?
- google-analytics - 扁平化分析数据 - hit.type PAGE 丢失
- django - 如何重命名从 Django 模型自动生成的 GraphQL 类型字段?
- python - 在散点图上添加颜色条标签作为文本
- java - 在基于 java 的 Spring 配置中使用非公共类
- java - Java 8 时间 - 将 Javascript 的 Date().getTimezoneOffset 转换为 ZoneOffset
- java - 如何在 spring-boot 多模块 Java 11 项目中添加 Spark 依赖项
- c# - 如何在 C# 中获取网格控件列以显示带两位小数的价格?
- sql - 如何在不重复员工 ID 的情况下计算表中的姓氏
- c# - 如何构建具有一些预定义配置的其他依赖项目的 csproj