
Angenommen man hat eine komplexe historisch gewachsene (*seufz*) Umgebung mehrere Server … 1)
In dieser Umgebung gibt es Startupscripts, die PID-Files anlegen (welche root gehören). Die PID-Files bleiben liegen -- so die Maschine abraucht (oder Strom verliert oder ….). Beim folgendem Neustart der Maschine sind die Startup-Scripts leider zu doof, die PID-Files selbst wieder wegzuräumen und können den Dienst deswegen nicht starten.
Da das ganze eine tiefe Verschachtlung von (insgesamt nicht ganz sinnlosen) Scripts mit mehrfachen Privilegienwechseln ist, will und kann man das jetzt auch nicht ohne sehr grossen Aufwand alles neu schreiben.
Das folgende Script muss dann nur noch an passender Stelle beim Booten aufgerufen werden (z.B. ins rc-script oder in /etc/conf.d/local.start bei Gentoo)
#!/bin/bash # pidfileremover loescht die laestigen uebriggebliebenen # pid-dateien die vor allem dann entstehen, wenn die # maschine ploetzlich abraucht # nur pid-files sollen geloescht werden, bei denen kein # prozess mehr vorhanden ist # optional kann man eine Datei angeben, die geprueft # und gegebenenfalls geloescht wird export PATH="/sbin:/usr/sbin:/usr/bin:/bin" pidfiledirs="/tmp /var/tmp" removepidfile() { if [[ -f $file ]] ; then if [[ -h $file ]] ; then echo -n "$file ist symlink ..." echo " wird NICHT geloescht" return 10 fi eigentuemer=`stat -c %U $file` if [[ $eigentuemer != "root" ]] ; then echo -n "$file gehoert nicht root ..." echo " wird NICHT geloescht" return 20 fi pid=`cat $file` if ! echo $pid | grep "^[0-9]*$">/dev/null then echo "$file enthaelt keine gueltige pid ($pid)" return 40 fi ps -e | grep $pid | grep -v grep > /dev/null if [[ $? -eq 0 ]]; then echo -n "Prozess mit passender PID gefunden ..." echo " $file wird NICHT geloescht" return 80 fi echo "$file wird GELOESCHT" rm $file fi } if [[ -n $1 ]]; then file=$1 removepidfile else for dir in $pidfiledirs; do for file in $dir/*pid ; do removepidfile done done fi
wenn jemand Verbesserungsvorschläge hat oder bedenkenswerte Ansätze, warum das hier auch schiefgehen kann: immer her damit!
2009-07-24
gilt für alle Tipps, Tricks & Spickzettel:
dies sind einfache, teils banale Notizen für meinen persönlichen Gebrauch,
die hier eher zufällig auch öffentlich lesbar sind
(vielleicht hilft es ja jemandem weiter). Verwendung auf eigene Gefahr
Fehler-Hinweise, Dankesschreiben , etc. bitte an: web.21@unixwitch.de
weitere Tools / Spickzettel