Thursday, November 25, 2010

Die Prozess ID (PID) eines Prozesses unter Unix speichern - Beispiel ApacheDS

Immer wieder kommt es vor, dass Daemon-Prozesse ihre Prozess IDs nicht speichern können. Das hat den Nachteil, dass der Prozess später nicht mehr akkurat erkannt und beendet werden kann.

Zum Beispiel Apache Directory Server in der Version 1.5.4. Der proprietäre IBM Rational Directory Server für IBM Rational Synergy verlässt sich auf diese Version.

Das mitgelieferte .sh-Startskript ist unbrauchbar, weil nach dem Starten mit dem Bash-builtin $! nur die PID des Bash-Prozesses des Startskripts abrufbar ist. So kann die PID trotzdem gespeichert werden:
# ApacheDS implementiert in dieser Version keine PID Speicherung
# java Kommando aus der .sh Datei greppen
# Ausgabe ist ein ApacheDS logo, deshalb nach dev null
# Daemonisiert sich nicht ordentlich, deshalb muss STDERR auch nach dev null
$(grep ^java apacheds_1.5.4/apacheds.sh) >/dev/null 2>&1 &
echo $! > apacheds.pid

beim Beenden ist es dann möglich, diese PID gezielt zu killen. Hier bietet sich killproc an, weil es auch noch überprüft, ob die PID aus dem laufenden Linux Kernel zum Prozess "java" gehört:
/sbin/killproc -p apacheds.pid -TERM /pfad/nach/jre/bin/java

Problem gelöst. Für ApacheDS werden neuere Versionen sicher eine bessere Lösung bieten, zum Beispiel durch ein neues Installationslayout.

No comments:

Post a Comment