pkill em um script

0

Estou tentando matar um processo pelo nome dele em um script.

Processo:

toto 15408     1  0 Nov13 ?        00:20:36 java -Xmx512m -XX:MaxPermSize=128m -cp /local/toto//conf/:/local/toto//lib/* com.toto.main.entry.Launchtoto processToto

no meu script:

/usr/bin/sudo -u toto /usr/bin/pkill -9 -f $pname

Em sudoers:

script_user server1=(toto) NOPASSWD: /usr/bin/pkill -9 -f java *

Não funciona. Ou eu tenho um erro sudo ( sudo: no tty present and no askpass program specified ) ou um erro pkill ( /usr/bin/pkill: invalid option -- 'X' ).

pname contém:

java -Xmx512m -XX:MaxPermSize=128m -cp /local/toto//conf/:/local/toto//lib/* com.toto.main.entry.Launchtoto processToto
    
por tonio94 19.11.2015 / 17:30

1 resposta

1

Você usou um substituição de variável fora de aspas duplas. Não faça isso. Como $pname está sem aspas, seu valor é dividido em caracteres de espaços em branco, portanto, pkill obtém os argumentos -9 , -f , java , -Xmx512m , -XX:MaxPermSize=128m , -cp , /local/toto//conf/:/local/toto//lib/* , com.toto.main.entry.Launchtoto , processToto . Naturalmente pkill reclama quando atinge a opção -X que não entende.

Basta passar o valor de pname como argumento para pkill , ou seja,

/usr/bin/sudo -u toto /usr/bin/pkill -9 -f "$pname"

Quanto ao prompt de senha sudo, minha bola de cristal me diz que você colocou a entrada NOPASSWD antes de outra entrada sem NOPASSWD para o mesmo usuário. A entrada NOPASSWD precisa ser a última. Veja Como executar um específico programa como root sem um prompt de senha?

    
por 20.11.2015 / 02:51