Я пытаюсь найти PID процесса Kibana, запущенного на моей машине Centos7.
У меня есть скрипт, который находит PID, запустив следующую строку:
kibana_pid=$(ps -ef | grep elk | grep kibana | awk '{print $2}')
(kibana запускается из созданной мною папки elk.
Кроме того, в сценарии я проверяю pid, если пользователь предоставляет агрегацию «status»:
if [[ $userCommand == "status" && $elk_part == "kibana" ]]
then
if [[ -z "$kibana_pid" ]]
then
echo "Kibana is not running"
else
echo "Kibana is running with pid of: $kibana_pid"
fi
fi
Когда я запускаюсценария с этими аргументами, выход ./elk_ctl.sh состояния kibana был:
Kibana is running with pid of: 28250
32213
32219
Но когда я запускаю ту же команду, чтобы найти PID вне сценария, в моей командной строке я получаюошибочный результат - только один номер PID:
$ps -ef | grep elk | grep kibana | awk '{print $2}'
вывод:
28250
Странная вещь, когда я запускаю:
$ ps -ef | grep elk | grep kibana
Я получаю только одну строку.
РЕДАКТИРОВАТЬ 1: обнаружено более странное поведение: я добавил следующую строку в начало скрипта, чтобы я мог видеть, что такое pid при его создании:
kibana_pid=$(ps -ef | grep elk | grep kibana | awk '{print $2}')
echo "kibana PID at start is: $kibana_pid"
Когда яrun: ./elk_ctl status kibana
Я получаю этот вывод:
kibana PID at start is: 1634
1640
28250
Kibana is running with pid of: 1634
1640
28250
Когда я запускаю это, однако:
./elk_ctl status
(что приводит к сообщению об использовании wring)
Я получаю:
kibana PID at start is: 28250
Wrong use. Please run: ./script start/stop/status elasticsearch/kibana
Что такого особенного в комбо "status kibana", которое получаетсяв более чем одном найденном PID?
РЕДАКТИРОВАТЬ 2: обнаружено более странное поведение: я изменил строку эха в начале скрипта, чтобы показать:
echo `ps -ef | grep elk | grep kibana`
И вывод: for./elk_ctl status kibana -
Name 2229 25111 0 12:54 pts/4 00:00:00 /bin/bash ./elk_ctl.sh status kibana
Name 2240 2229 0 12:54 pts/4 00:00:00 /bin/bash ./elk_ctl status kibana
Name 28250 1 0 11:05 pts/3 00:00:20 /home/Name/elk/kibana/bin/../node/bin/node --no-warnings /home/Name/elk/kibana/bin/../src/cli
Kibana is running with pid of: 2229
2235
28250
for ./elk_ctl.sh status -
Name 28250 1 0 11:05 pts/3 00:00:20 /home/Name/elk/kibana/bin/../node/bin/node --no-warnings /home/Name/elk/kibana/bin/../src/cli
Wrong use. Please run: ./script start/stop/status elasticsearch/kibana
Итак, опять же, почему есть разные результаты, когда я использую "status kibana" и просто "status "?
Итак, мой вопрос:
Почему скрипт находит более одного Pid?похоже, что в ps есть только одно совпадение.
Почему скрипт и командная строка имеют разные результаты?Я проверил предыдущие ответы, и у большинства из них есть проблемы с переменными или регулярными выражениями в grep, но у меня их нет.Почему это происходит?
Спасибо!