Hi!
Habe leider seit einiger Zeit das Problem, dass VDR abstürzt, sich dann aber nicht automatisch neu startet. Offensichtlich greift der Watchdog, kann vdr aber nicht zu 100% beenden. Es bleiben dann zwei VDR-Prozesse übrig, wobei einer "vdr <defunct>" heißt .... wird wohl ein Zombie sein oder?
Naja, auf jeden Fall wollte ich ein kleines Workaround-Skript schreiben, das einfach überprüft ob so ein Prozess existiert und falls ja, soll dieser "abeschossen" werden. Ich fahre nämlich bald auf Urlaub und dann möchte ich sicherstellen, dass der VDR verlässlich läuft ... was er im Moment leider nicht macht. Die Ursache des Abstürzens habe ich leider nicht rausbekommen, deshalb das Skript.
Habe nun folgendes "gecodet" (man beachte meine nicht vorhandenen Skript-Skills :D):
GREP_ME="`/bin/ps -A | /usr/bin/grep -w 'vdrWatchdog' | /usr/bin/wc -l`"
GREP_VDR="`/bin/ps -A | /usr/bin/grep -w 'vdr <defunct>' | /usr/bin/wc -l`"
KILL="/usr/bin/killall"
# Extrem unelegante Methode um festzustellen, ob bereits vdrWatchdog läuft ;-)
if [ $GREP_ME -gt 2 ]; then
echo "vdrWatchdog allready running! Exiting."
exit 1
fi
while (true) do
if [ $GREP_VDR -gt 0 ]; then
logger -is "Detected VDR-Zombie. Killing it."
# make sure, a full restart is made (reloading drivers)
# benötige ich für meine veränderte MYrunvdr
touch /etc/vdr/.vdrRestarted
$KILL vdr -9
fi
sleep 10
done
Alles anzeigen
Soweit so gut, das ganze funktioniert auch, wenn ich vdrWatchdog im Vordergrund ausführe. Sobald ich das Skript aber mit "&" als Daemon starte oder über "echo '/usr/local/bin/vdrWatchdog' | at now" ausführen lasse, funktioniert es nicht mehr. Die if-Bedingung scheint plötzlich falsch zu sein.
Hat jemand einen Tipp für mich, was ich dabei übersehen habe?
Gruß,
Brougs78
P.S.: Vielleicht hat auch jemand eine Idee wegen dem <defunct>-Prozess.