스크립트에서 그의 이름으로 프로세스를 종료하려고 합니다.
프로세스:
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
가 아닌 다른 항목 앞에 놓았다고 알려줍니다 . NOPASSWD
이 NOPASSWD
항목은 마지막 항목이어야 합니다. 바라보다비밀번호를 묻지 않고 루트로 특정 프로그램을 어떻게 실행할 수 있나요?