操作系统:RHEL 7.3。我在命令下运行:
ps uax | grep 'elasticsearch' | grep -v grep | awk '{print $2}'
如果我在终端上运行此命令,我会获得一个Elasticsearch进程的PID。但是,如果我将相同的命令放入shell脚本中,那么:
#!/bin/bash
PID=$(ps uax | grep 'elasticsearch' | grep -v grep | awk '{print $2}')
echo $PID
我得到了一个低于其他的PID。可能出现什么问题?
启动ES的完整脚本如下:
#!/bin/bash
if [ "$ES_HOME" == "" ]; then
echo "ES_HOME environment variable does not exists. Please set it to home dir of Elasticsearch and try again"
fi;
PID=$(ps aux | grep "elasticsearch" | grep -vE "start|grep" | awk '{print $2}' | xargs)
if [ "$PID" != "" ]; then
echo "Elasticsearch is already running with PID: $PID"
echo ""
exit;
fi;
echo "Starting Elasticsearch"
sh $ES_HOME/bin/elasticsearch.sh > /dev/null &
答案 0 :(得分:0)
在您的脚本中,您在bash shell
#!/bin/bash
中运行它,只需在手动执行时检查当前的shell是什么。如果不同,则相应地更改shell。否则我没有看到任何区别。还要检查运行脚本时使用的用户ID。
答案 1 :(得分:0)
如果您的计算机上pgrep
不可用,则可以使用ps
而不grep
仅使用pid
来获取进程的name
。< / p>
例如,
#!/bin/bash
_pid=$(ps -C NetworkManager -o pid=)
echo "$_pid"
NetworkManager
是在使用ps
时将在流程表中看到的命令的名称。您可以将其替换为elasticsearch
。