Questão Um script para verificar se um processo java está sendo executado como usuário root


No momento, estou tentando criar um script para verificar se um processo Java específico ( ps -efl | grep java ) está sendo executado como root.

Atualmente eu venho com o seguinte, mas não imprimiu o que eu preciso, alguma sugestão onde eu estou indo errado?

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

Neste caso, o processo java será Introscope_WebView.lax e quero verificar se isso está sendo executado como usuário root. Se assim for, dê-me 1 & raiz de execução de outra forma me dê mais e não raiz.


1
2018-02-08 13:45


origem


A opção -x do pgrep corresponde apenas aos processos que correspondem EXATAMENTE ao padrão. Talvez o nome seja outra coisa, tente procurar com 'ps -ef | grep "Introscope" *. Além disso, quais são as saídas EXATAS do comando youe pgrep? Tente repeti-lo como "echo" X $ {process_count} X "e verifique o que há entre os X's. Por último, se o trabalho acima funcionar, qual é o resultado se mais de um processo do Introscope estiver sendo executado como root? - Soren A
Oi @SorenA - Obrigado pela sua resposta, sim, eu verifiquei o nome e isso está correto, é muito estranho .......................... ........... /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


Respostas:


Você deve apenas ser capaz de testar o status de saída pgrep diretamente, por ex.

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

Observe que isso também process_user="Not Root" Se o processo não existir - se você quiser cobrir todos os três casos (em execução e de propriedade do root; executando, mas pertencente a outra pessoa; não sendo executado), será necessário adicionar um teste separado.


por exemplo. dado

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

então

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

A partir de 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



Obrigado pela sua resposta - Tentei usar isso, mas ainda diz Not Root, quando eu verificar usando ps -efl | grep java indica que está sendo executado como root: /opt/ca/APM/Introscope10.2.0.27/Introscope_WebView.lax /tmp/env.properties.12003 - John Barnes
Então, como pode 'Introscope_WebView.lax' ser uma correspondência exata para '/opt/ca/APM/Introscope10.2.0.27/Introscope_WebView.lax'? - Soren A
Você provavelmente quis usar -f - muru