Hallo nochmals,
ich habe mir nun eine halbwegs vernünftige Lösung erstellt: Ein Shell-Skript, welches zuerst alle PIDs der "apache2"-Prozesse des Benutzers "www-data" sichert, dann einen Server-Neustart initialisiert und anschließend jede Sekunde überprüft, ob die Prozesse mit den PIDs noch existieren (denn die neuen Prozesse haben immer eine höhere PID).
Anschließend werden trotzdem noch 30 Sekunden Sicherheitspause eingelegt, da die beiden Zeilen "apache2pids=pgrep -U www-data apache2
" zusammen mit "apache2ctl -k graceful" keine atomare Operation (EN) darstellen.
In Ausnahmefällen könnte nämlich genau in der Mitte der beiden Operationen ein neuer Prozess gestartet werden, dessen PID nicht in der Variable $apache2ctl zu finden ist und der ergo auch nicht überprüft wird.
Gibt es eine Möglichkeit, diese kleine Ungereimtheit auch noch zu entfernen? Wenn ihr mir dabei helft haben wir nachher eine schöne Lösung gefunden, wie man einen Apache2-Server "nett" neustarten kann und trotzdem weiß wann er neu gestartet ist. :-)
Hier das Skript, wie ich es derzeit verwende:
#!/bin/bash
function someProcessesLeft () {
for pid in $@
do
if $(ps -p $pid > /dev/null)
then
return 0
fi
done
return 1
}
# -----------------------------------------------------------------------
echo "DO SOMETHING HERE (before Apache2 restart)"
# -----------------------------------------------------------------------
# Save processes and init restart
apache2pids=`pgrep -U www-data apache2`
apache2ctl -k graceful
while someProcessesLeft $apache2pids
do
sleep 1
echo -n "."
done
echo
echo "Waiting for 30 seconds to ensure the restart was successfully..."
sleep 30
# -----------------------------------------------------------------------
echo "DO SOMETHING HERE (after Apache2 restart)"
# -----------------------------------------------------------------------
Grüße
Marc Reichelt || http://www.marcreichelt.de/
DPRINTK("Last time you were disconnected, how about now?");
linux-2.6.6/drivers/net/tokenring/ibmtr.c
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)