Code: Alles auswählen
#!/bin/bash
# /usr/local/bin/monitor-log
#
# Monitor $LOGFILE for a pattern $PATTERN.
# Perform an action when $PATTERN matches.
LOGFILE=/var/log/kern.log
PATTERN='Mismatch'
tail -Fn0 $LOGFILE | \
while read line; do
echo "$line" | grep -i "$PATTERN" > /dev/null
if [ $? = 0 ]
then
sleep 10
# echo "0000:00:10.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
echo '1-2' > /sys/bus/usb/drivers/usb/unbind
sleep 5
# echo "0000:00:10.0" > /sys/bus/pci/drivers/xhci_hcd/bind
echo '1-2' > /sys/bus/usb/drivers/usb/bind
# echo "USB-xHCI root hub rebound" | mail -s xHCI root
echo "RTL2838UHIDIR rebound" | mail -s xHCI root
fi
done
Das funktioniert seit Wochen einwandfrei und ich hatte schon 3 Blockaden des USB-Ports, die durch unbind/bind des xhci_hcd Moduls sofort gelöst wurden. Heute habe ich im Script eine Änderung vorgenommen und es läuft der Versuch, ob es reicht, das auf den betreffenen USB-Port (mit dem RTL-SDR-Stick) anzuwenden.
Um das Script neu einzulesen, genügt ein
Code: Alles auswählen
supervisorctl restart monitor_log
Das laufende Script insgesamt 3 PID's erzeugt, z.B. aktuell
Code: Alles auswählen
19237 monitor-log
19238 tail
19239 monitor-log
Code: Alles auswählen
pgrep -l monitor-log
19081 monitor-log # Zombie
19237 monitor-log
19239 monitor-log
pgrep -l tail
566 tail # alt
18678 tail # alt
18694 tail # alt
19080 tail # Zombie
19238 tail
Ok, die Zombi-PID's von monitor-log kann ich einfach vermeiden, indem ich statt über supervisotctl das Script nach Änderung einfach durch
Code: Alles auswählen
killall monitor-log
Die tail-PID's sind mir erst heute aufgefallen, da ich dachte, die 2te monitor-log-PID stammt aus meiner Loop im Script.
Was mache ich da falsch, oder wie kann ich diese Zombi-PID's vermeiden?
Gruß, Ingo