스크립트의 pkill

스크립트의 pkill

스크립트에서 그의 이름으로 프로세스를 종료하려고 합니다.

프로세스:

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

내 스크립트에서:

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

sudoers에서:

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

이것은 작동하지 않습니다. sudo 오류( sudo: no tty present and no askpass program specified) 또는 pkill 오류( ) 가 있습니다 /usr/bin/pkill: invalid option -- 'X'.

pname포함하다:

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

답변1

큰따옴표 밖에서 변수 대체를 사용했습니다. 이렇게 하지 마십시오.따옴표가 없기 때문에 $pname해당 값은 공백 문자로 분할되므로 pkill매개변수 -9, -f, java, -Xmx512m, -XX:MaxPermSize=128m, -cp, /local/toto//conf/:/local/toto//lib/*, com.toto.main.entry.Launchtoto, 을 얻습니다 processToto. 이해할 수 없는 옵션에 도달하면 pkill자연스럽게 불평할 것입니다 .-X

pname매개변수로 값을 전달하기 만 하면 됩니다 pkill. 즉,

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

sudo 비밀번호 프롬프트의 경우 내 수정 구슬은 해당 항목을 동일한 사용자 NOPASSWD가 아닌 다른 항목 앞에 놓았다고 알려줍니다 . NOPASSWDNOPASSWD항목은 마지막 항목이어야 합니다. 바라보다비밀번호를 묻지 않고 루트로 특정 프로그램을 어떻게 실행할 수 있나요?

관련 정보