Работа с простым скриптом bash, который я могу использовать, чтобы в конечном счете сказать мне, запущен ли процесс изгоев, который нам не нужен, - этот в конечном итоге будет работать с другим родительским pid. монитор рода. Там, где у меня проблема, я получаю все конкретные значения, которые я хочу в массив, на который я могу выполнить некоторые действия. Сценарий первый:bash скрипт для сбора pids в массиве
#!/bin/bash
rmanRUNNING=`ps -ef|grep /etc/process/process.conf|egrep -v grep|wc -l`
if [ $rmanRUNNING -gt 0 ]
then
rmanPPID=($(ps -ef|grep processname|egrep -v grep|egrep -v /etc/process/process.conf|awk '{ printf $3 }'))
for i in "${rmanPPID[@]}"
do
:
echo $i
done
fi
Таким образом, цель состоит в том, чтобы проверить наличие основного процесса, это один работает с файлом конфигурации в этом, первая переменная говорит мне об этом. Затем, если он работает (на основе countherher than 0), намеревается заполнить массив всеми родительскими pids, исключая то, что будет определено как основной процесс (нам не нужно анализировать этот). Таким образом, в определении массива мы получаем список процессов, имя процесса grep, egrep -v выход grep, также egrep -v «основной» процесс, а затем awk родительских pids, затем перебираем и пытаемся эхо каждого из них индивидуально (больше будет сделано в этом разделе, но это не работает). К сожалению, когда я вывожу $ i, все родительские pids просто объединяются вместе в одну длинную строку. Если я попытаюсь вывести определенный элемент массива, я получаю пустой вывод.
Очевидно, вопрос в том, что не так с моим определением массива, которое препятствует его объявлению в виде массива или какой-то другой странной вещи.
Это на RHEL, 6.2 на тестовой среде, возможно, 7 в производстве к тому времени, когда это будет жить.
Полное раскрытие информации, я инженер по мониторингу, а не SA - определенно не сценарий bash от природы!
Заранее спасибо.
EDIT: только для ясности эхо-сигнал на экране PID не является конечным желаемым выходом, это просто простой способ проверить, что я возвращаю то, что ожидаю. Основываясь на комментарии ниже, я считаю, что вывод типа pgrep является предпочтительным. В конце концов я буду связывать эти pids назад по одному против первоначального процесса, чтобы гарантировать, что он является родителем, и если это не так, я выплю ошибку.
Как насчет простых 'PPIDs = ($ (ps -oppid = $ (pgrep -f 'processname. */etc/process/process.conf')))' – anishsane
Почему вы не знали, использовать '$ (...)' в строке 2, но вы знали, чтобы использовать его в строке 6? –
@EdMorton В строке 2 Я не пытаюсь записывать значения в массив, просто получая подсчет запущенных процессов, соответствующих моим критериям. – billhubb84