Ich schreibe ein einfaches Bash-Skript, um Tomcat herunterzufahren. Wenn dies nicht ordnungsgemäß geschieht, prüfe ich, ob die PID von Tomcat noch vorhanden ist, und beende sie.
Ich übergebe den Tomcat-Namen als Variable an das Skript, wie unten dargestellt. In manchen Fällen übergebe ich zwei oder drei Tomcat-Namen, weshalb die Verwendung von FOR LOOP unten
./shutdown.sh tomcat1
Inhalt des Shutdown.sh-Skripts
#!/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"
Wenn Tomcat ordnungsgemäß herunterfährt, gibt es kein Problem. Aber wenn Tomcat nicht stoppt, habe ich Probleme.
Der folgende Codeabschnitt gibt mir, wenn er direkt in der Eingabeaufforderung ausgeführt wird, die korrekte Prozess-ID (62457) von Tomcat. Aber derselbe Abschnitt im Shell-Skript gibt mir drei Prozess-IDs (62610,62611,62457).
process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`
können Sie mir erklären, warum ich im Skript drei Prozess-IDs und nicht nur eine erhalte?
Gibt es einen anderen, einfacheren Vorschlag zum TÖTEN?