"su -c"로 시작된 명령에서 프로세스 ID 가져오기

"su -c"로 시작된 명령에서 프로세스 ID 가져오기

쉘에서 Java 프로그램을 실행하고 프로세스 ID를 텍스트 파일에 쓰고 있습니다. 그래서 내가 할 때 :

nohup java app.Main > /dev/null 2>&1 &
echo $! > /var/run/app.pid

효과가있다. 하지만 다른 사용자로 실행하고 싶습니다.

su - appuser -c "nohup java app.Main > /dev/null 2>&1 &"
echo $! > /var/run/app.pid

이것은 작동하지 않습니다. -c 옵션으로 시작된 명령의 프로세스 ID를 가져오는 방법이 있습니까?

답변1

넌 할 수있어:

su - appuser -c 'nohup java app.Main > /dev/null 2>&1 &
                 echo "$!"' > /var/run/app.pid

(가상의 로그인 쉘은 appuserBourne과 유사합니다.)

su -환경을 재설정하므로 명령줄에서 변수를 확장하려면 다음을 통과해야 합니다.당신의쉘(원격 사용자의 로그인 쉘이 아님), 예:

su - appuser -c "nohup '$JAVA_BIN' '$JAVA_CLASS' > /dev/null 2>&1 &"'
                 echo "$!"' > /var/run/app.pid

(이러한 변수에 작은따옴표 문자가 포함되어 있지 않다고 가정).

셸(쓰기 권한이 없을 수 있음 ) root이 아닌 셸(로 실행 중인)에서 리디렉션이 수행되기를 원합니다 .appuser/var/run

관련 정보