쉘에서 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
(가상의 로그인 쉘은 appuser
Bourne과 유사합니다.)
su -
환경을 재설정하므로 명령줄에서 변수를 확장하려면 다음을 통과해야 합니다.당신의쉘(원격 사용자의 로그인 쉘이 아님), 예:
su - appuser -c "nohup '$JAVA_BIN' '$JAVA_CLASS' > /dev/null 2>&1 &"'
echo "$!"' > /var/run/app.pid
(이러한 변수에 작은따옴표 문자가 포함되어 있지 않다고 가정).
셸(쓰기 권한이 없을 수 있음 ) root
이 아닌 셸(로 실행 중인)에서 리디렉션이 수행되기를 원합니다 .appuser
/var/run