제가 이해하는 바는 일반적으로 데몬용 PID 파일을 생성하는 것이 좋은 생각이라는 것입니다. 이는 startproc
해당 데몬을 시작하는 좋은 방법입니다.
PID 파일을 참조하려면 -i 및 -p 매개변수가 필요하다는 것을 알고 있지만 startproc
PID 파일을 생성하거나 시작한 데몬의 ID로 업데이트하지 않습니다. echo 를 사용할 $!
때 올바른 프로세스 식별자도 제공되지 않습니다 .startproc
startproc
데몬의 PID를 얻는 방법에 대한 제안이 있는 사람이 있습니까?
어쨌든, 나는 rc 스크립트를 작성 중이고 권한이 없는 사용자로 JVM을 시작하고 싶습니다. 나는 이 사용자에게 로그인 셸(옵션이 아님)을 제공하고 싶지 않으며 su -c "java ..." user
데몬이 실행되는 동안 루트 프로세스를 정지시키고 싶지 않습니다(이것은 제외됩니다 sudo -Eu user java ...
). 따라서 이것이 가능한 모든 해결 방법임을 인정하지만 그 중 어떤 것도 이상적이라고 생각하지 않습니다. 그러나 이러한 대안에 대한 나의 가정이 잘못된 경우 언제든지 수정해 주시기 바랍니다.
답변1
이 작업을 수행하는 방법을 아는 사람은 아무도 없는 것 같습니다.
java
대신 저는 Tomcat이 기본적으로 수행하는 작업을 수행했습니다. 쉘 스크립트를 작성하고 직접 호출하는 대신 내 서비스에서 호출했습니다 .
echo $!
이 쉘 스크립트는 JVM을 시작한 후 PID 파일을 생성하는 역할도 담당합니다 . 종료의 경우 이 PID 파일을 확인하고 성공적인 종료 후 삭제하기 위해 유사한 스크립트를 작성했습니다. 두 스크립트 모두 sudo -Eu $USER script_name.sh
서비스에서 호출됩니다.
startproc
기술적으로 이것은 해당 솔루션이 이를 전혀 사용하지 않기 때문에 내 질문에 대답하지 않지만 작동하고 실행 중인 프로세스의 명령줄을 비교하는 지루한 작업을 방지합니다.
답변2
동일한 문제가 발생하여 몇 가지 방법을 시도했습니다.
PID=$(startproc -p $PID_FILE <some parameters>)
echo $PID > $PID_FILE
작동했습니다...SLES 11 SP4에서 시도했습니다.
그러나 SLES 12에서는 모든 것이 완전히 다릅니다 :(