30 lines
1.6 KiB
Bash
30 lines
1.6 KiB
Bash
#!/bin/sh
|
|
set -u
|
|
LOG_DIR="$HOME/vdi-terminal/logs"
|
|
LOG_FILE="$LOG_DIR/overnight-$(date +%Y%m%d).log"
|
|
mkdir -p "$LOG_DIR"
|
|
log() { printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S %z')" "$*" >> "$LOG_FILE"; }
|
|
log "monitor_start pid=$$ interval=60s"
|
|
while :; do
|
|
now=$(date '+%Y-%m-%d %H:%M:%S %z')
|
|
shell_pid=$(pgrep -f '^/home/armbian/vdi-terminal/bin/kiosk-shell$' | head -n 1 || true)
|
|
monitor_pid=$(pgrep -f '^/home/armbian/vdi-terminal/bin/vdi-kiosk-monitor' | head -n 1 || true)
|
|
if [ -n "$shell_pid" ]; then
|
|
ps_line=$(ps -o pcpu=,pmem=,rss=,etime= -p "$shell_pid" | tr '\n' ' ')
|
|
else
|
|
ps_line="missing"
|
|
fi
|
|
temp=$(awk '{printf "%.1f", $1/1000}' /sys/class/thermal/thermal_zone0/temp 2>/dev/null || printf "unknown")
|
|
mem=$(awk '/MemTotal:|MemAvailable:|SwapFree:/{printf "%s=%sKB ",$1,$2}' /proc/meminfo 2>/dev/null || true)
|
|
heartbeat="missing"
|
|
if [ -f /tmp/vdi-kiosk.heartbeat ]; then
|
|
heartbeat=$(stat -c '%Y' /tmp/vdi-kiosk.heartbeat 2>/dev/null || printf 'unknown')
|
|
fi
|
|
rdp=$(ss -tnp 2>/dev/null | grep '192.168.1.70:3389' | tr '\n' ';' || true)
|
|
starts=$(grep -c '主进程已启动' /tmp/vdi-kiosk-monitor.log 2>/dev/null || printf 0)
|
|
exits=$(grep -c '主进程已退出' /tmp/vdi-kiosk-monitor.log 2>/dev/null || printf 0)
|
|
crashes=$(grep -ciE 'segmentation fault|bus error|double free|invalid pointer|aborted|terminate called' /tmp/vdi-kiosk-monitor.log 2>/dev/null || printf 0)
|
|
log "sample now=$now shell_pid=${shell_pid:-missing} monitor_pid=${monitor_pid:-missing} ps=[$ps_line] temp_c=$temp heartbeat_epoch=$heartbeat rdp=[$rdp] starts=$starts exits=$exits crashes=$crashes $mem"
|
|
sleep 60
|
|
done
|