Scripts de inicialização: Preciso de um arquivo PID?

0

Eu sou novo no mundo dos scripts init e ainda é um neófito BASH. Eu estou atualmente em uma situação onde eu poderia usar alguma orientação.

Nós rodamos um aplicativo que utiliza o JBOSS e eu preciso ser capaz de lidar com isso como um daemon usando um script de inicialização. Esta é a primeira vez que escrevo um script de inicialização e entendo que muitas vezes arquivos '.pid' são usados para acompanhar um processo usando um script de inicialização, no entanto, eu me pergunto se eles são realmente necessários na minha situação.

Por exemplo, quando vou usar a função "stop" do meu script de inicialização, posso fazer com que ele verifique o arquivo .pid para obter o ID do processo, ou posso simplesmente fazer com que ele obtenha o PID usando "checkproc".

Aqui está um exemplo do que escrevi.

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
}

Eu escrevi minhas funções "start" e "status" para obter o PID assim também. Eu testei e parece funcionar bem, mas eu não sei se há algo que estou perdendo que poderia dar errado sem um arquivo .pid. Existe alguma razão para eu descartar essa lógica e usar um arquivo .pid?

    
por azurepancake 09.11.2015 / 15:11

1 resposta

0

Você pode fazer seu script de inicialização sem um arquivo pid, não haverá problemas com ele. A menos que outro usuário inicie uma instância do jboss manualmente. Eu não acho que seu script de inicialização pode lidar com várias linhas retornadas por "checkproc -v $ JBOSS_PROCESS_NAME"

O arquivo pid é útil principalmente quando há a possibilidade de vários aplicativos serem iniciados na mesma máquina. Você não quer que seu script de inicialização pare as instâncias iniciadas por outros usuários.

Portanto, em vez de matar o primeiro (ou todos) programa que possui uma cadeia específica, salve o arquivo pid do programa iniciado a partir do script de inicialização. Dessa forma, quando você tentar matar o programa, você apenas matará o iniciado por você.

    
por 09.11.2015 / 15:31