Вопрос Скрипт для проверки, работает ли java-процесс как пользователь root


В настоящее время я пытаюсь создать скрипт, чтобы проверить, не является ли конкретный Java-процесс ( ps -efl | grep java ) работает как root.

В настоящее время я придумал следующее, но он не распечатывал то, что мне нужно, любые предложения, в которых я ошибаюсь?

process_count=`pgrep -u root -x Introscope_WebView.lax;echo $?`
if [ "$process_count" -eq 1]
    then
        process_user="Root"
    else
        process_user="Not Root"
fi
echo "<metric type=\"LongCounter\" name=\"OS Processes|WebView User Process:Process Count\" value=\"$process_count\"/>"
echo "<metric type=\"StringEvent\" name=\"OS Processes|WebView User Process:Process User\" value=\"$process_user\"/>"
exit 0

В этом случае процесс java будет Introscope_WebView.lax и я хочу проверить, работает ли это как пользователь root. Если да, дайте мне 1 & run root, иначе дайте мне другое, а не root.


1
2018-02-08 13:45


происхождения


Параметр -x pgrep соответствует только тем процессам, которые ТОЧНО соответствуют шаблону. Может быть, это имя что-то еще, попробуйте посмотреть «ps -ef | grep "Introscope" *. Кроме того, что представляет собой EXACT вывод команды pepp youe? Попробуйте повторить его как «echo» X $ {process_count} X »и проверьте, что находится между X. Наконец, если это работает, каков результат, если работает более одного процесса Introscope с правами root? - Soren A
Привет @SorenA - Спасибо за ваш ответ, да, я проверил имя, и это правильно, очень странно .......................... ........... /opt/ca/APM/Introscope10.2.0.27/Introscope_WebView.lax /tmp/env.properties.12003 rp1cem 16238 14948 0 14:14 pts / 0 00:00:00 grep java - John Barnes


ответы:


Вы должны просто проверить статус выхода pgrep непосредственно, например.

if pgrep -u root -xf 'Introscope_WebView.lax' > /dev/null
then
    process_user="Root"
else
    process_user="Not Root"
fi

Обратите внимание, что это также будет установлено process_user="Not Root" если процесс вообще не существует - если вы хотите охватить все три случая (запущенные и принадлежащие root, работающие, но принадлежащие кому-то другому, не работающие), вам нужно будет добавить отдельный тест.


например данный

$ ps -ef | grep [i]nit
root         1     0  0 Jan21 ?        00:00:05 /sbin/init splash

тогда

$ if pgrep -xfu root '/sbin/init splash' >/dev/null ; then echo 'root owns it'; fi
root owns it

Из man pgrep

EXIT STATUS
       0      One or more processes matched the criteria.
       1      No processes matched.
       2      Syntax error in the command line.
       3      Fatal error: out of memory etc.

4
2018-02-08 14:00



Спасибо за ваш ответ. Пытался использовать это, но все же говорит «Не корень», когда я проверяю использование ps -efl | grep java заявляет, что он работает от имени root: /opt/ca/APM/Introscope10.2.0.27/Introscope_WebView.lax/tmp/env.properties.12003 - John Barnes
Итак, как можно «Introscope_WebView.lax» точно соответствовать «/opt/ca/APM/Introscope10.2.0.27/Introscope_WebView.lax»? - Soren A
Вы, вероятно, хотели использовать -f - muru