summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/vyatta-monitor-cleanup36
1 files changed, 36 insertions, 0 deletions
diff --git a/scripts/vyatta-monitor-cleanup b/scripts/vyatta-monitor-cleanup
new file mode 100644
index 0000000..89eea93
--- /dev/null
+++ b/scripts/vyatta-monitor-cleanup
@@ -0,0 +1,36 @@
+#!/bin/bash
+declare CURRENT_PTS=$(tty | sed -e s-/--g -e s/dev//g)
+declare CURRENT_UID=$(id -u)
+declare CURRENT_UNAME=$(id -un)
+declare -a MPIDS
+MODE=$1
+MPIDS=( $(ls /var/run/vyatta/monitor/*.pid) )
+
+for pidfile in "${MPIDS[@]}"; do
+ pid=$(<$pidfile)
+ procname=$(cat /proc/$pid/cmdline 2>/dev/null)
+ if [[ "$procname" =~ "tail" ]] ; then
+ # Clean up tail processes that didn't die on logout
+ pts=${pidfile##*-pts}
+ pts=${pts%%.pid}
+ # If the process isn't attaced to the current PTY
+ if [[ "pts$pts" != "$CURRENT_PTS" ]]; then
+ # If I owned this process
+ if cat /proc/$pid/status | grep -q "Uid:.*$CURRENT_UID" ; then
+ # If I'm no longer on the pty that process started on
+ if ! who | grep -q "$CURRENT_UNAME.*pts/$pts" ; then
+ kill $pid
+ rm -rf $pidfile
+ fi
+ fi
+ elsif [[ "$MODE" == "LOGOUT" ]]; then
+ # on logout kill all monitors
+ kill $pid
+ rm -rf $pidfile
+ fi
+ else
+ # Clean up killed tail processes
+ rm -rf $pidfile
+ fi
+done
+