초기화 스크립트: PID 파일이 필요합니까?

초기화 스크립트: PID 파일이 필요합니까?

저는 init 스크립트의 세계를 처음 접했고 여전히 BASH를 처음 접했습니다. 현재 상황에 대한 지침이 필요합니다.

우리는 JBOSS를 활용하는 애플리케이션을 실행하고 있으며 init 스크립트를 사용하여 데몬처럼 이를 처리할 수 있어야 합니다. init 스크립트를 작성하는 것은 이번이 처음입니다. 일반적으로 ".pid" 파일이 init 스크립트를 사용하여 프로세스를 추적하는 데 사용된다는 것을 알고 있지만 제 경우에는 이 파일이 실제로 필요한지 궁금합니다.

예를 들어, init 스크립트의 "stop" 기능을 사용할 때 .pid 파일을 확인하여 프로세스 ID를 얻거나 단순히 "checkproc"을 사용하여 PID를 얻도록 할 수 있습니다.

다음은 제가 쓴 예입니다.

JBOSSPID=$(checkproc -v $JBOSS_PROCESS_NAME)

function _stop {
   # Check if JBOSS is running..
   if [ -z "$JBOSSPID" ]; then
      echo "Service is not running.."
      exit
   fi

   # Attempt to shutdown JBOSS gracefully..
   echo "Stopping service.."
   ./stop_jboss.sh

   # Loop until JBOSS PID no longer exists..
   RUNNING=0
   while [ "$RUNNING" == "0" ]
   do
      JBOSSPID=$(checkproc -v $JBOSS_PROCESS_NAME)
      if [ "$JBOSSPID" == "" ]; then
         RUNNING=1
      fi
   done
}

또한 PID를 얻기 위해 "시작" 및 "상태" 함수를 작성했습니다. 테스트해 보니 잘 작동하는 것 같지만 .pid 파일이 없으면 잘못될 수 있는 부분이 누락된 것인지 모르겠습니다. 이 논리를 포기하고 대신 .pid 파일을 사용해야 할 이유가 있나요?

답변1

pid 파일 없이도 init 스크립트를 문제 없이 만들 수 있습니다. 다른 사용자가 수동으로 jboss 인스턴스를 시작하지 않는 한. 귀하의 초기화 스크립트가 "checkproc -v $JBOSS_PROCESS_NAME"에 의해 반환된 여러 줄을 처리할 수 없는 것 같습니다.

pid 파일은 동일한 컴퓨터에서 여러 응용 프로그램을 시작할 때 주로 유용합니다. 초기화 스크립트가 다른 사용자가 시작한 인스턴스를 중지하는 것을 원하지 않습니다.

따라서 특정 문자열을 사용하여 첫 번째(또는 모든) 프로그램을 종료하는 대신 init 스크립트에서 시작된 프로그램의 pid 파일을 저장할 수 있습니다. 이렇게 하면 프로그램을 종료하려고 할 때 시작한 프로그램만 종료됩니다.

관련 정보