Estoy escribiendo un script bash simple para apagar Tomcat y, si no se detiene correctamente, verifico si el PID de Tomcat todavía existe y elimínelo.
Paso el nombre de Tomcat como una variable al script como se muestra a continuación. En algunos casos paso dos o tres nombres de Tomcat, razón por la cual el uso de FOR LOOP a continuación
./shutdown.sh tomcat1
Contenido del script Shutdown.sh
#!/bin/bash
for name in "$@"
do
bash /opt/$name/bin/shutdown.sh
done
sleep 30
for name in "$@"
do
process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`
if [ $process_id ]
then
kill -9 $process_id
fi
done
echo " Script Execution completed"
Cuando Tomcat se apaga correctamente, no hay problema. Pero cuando Tomcat no se detiene, tengo problemas.
El siguiente fragmento de código, cuando se ejecuta directamente en el símbolo del sistema, me proporciona el ID de proceso correcto (62457) de Tomcat. Pero el mismo fragmento de script de shell me proporciona tres ID de proceso (62610,62611,62457).
process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`
¿Puede decirme por qué obtengo tres ID de proceso en el script en comparación con solo uno?
¿Alguna otra sugerencia más fácil para MATAR?