add e_player crash recovery
This commit is contained in:
parent
33832861f5
commit
a9475f6320
100
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/bin/e_player_wrapper
Executable file
100
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/bin/e_player_wrapper
Executable file
@ -0,0 +1,100 @@
|
||||
#!/bin/sh
|
||||
# e_player 崩溃监控和恢复脚本
|
||||
|
||||
CRASH_COUNT_FILE="/data/.e_player_crash_count"
|
||||
STABLE_COUNT_FILE="/data/.e_player_stable_count"
|
||||
MAX_CRASH=5
|
||||
CHECK_INTERVAL=1
|
||||
STABLE_CHECKS=120 # 连续检测120s 进程存在才认为稳定
|
||||
|
||||
if [ ! -f "$CRASH_COUNT_FILE" ]; then
|
||||
echo 0 > "$CRASH_COUNT_FILE"
|
||||
fi
|
||||
if [ ! -f "$STABLE_COUNT_FILE" ]; then
|
||||
echo 0 > "$STABLE_COUNT_FILE"
|
||||
fi
|
||||
|
||||
echo "$(date): e_player_wrapper starting, waiting for e_player..." >> /data/crash.log
|
||||
WAIT_COUNT=0
|
||||
while [ $WAIT_COUNT -lt 20 ]; do
|
||||
if ps | grep -v grep | grep -v e_player_wrapper | grep e_player > /dev/null; then
|
||||
echo "$(date): e_player detected after ${WAIT_COUNT} checks, starting monitoring..." >> /data/crash.log
|
||||
break
|
||||
fi
|
||||
sleep 3
|
||||
WAIT_COUNT=$((WAIT_COUNT + 1))
|
||||
done
|
||||
|
||||
if ! ps | grep -v grep | grep -v e_player_wrapper | grep e_player > /dev/null; then
|
||||
echo "$(date): WARNING - e_player not found after 60s, will monitor anyway..." >> /data/crash.log
|
||||
fi
|
||||
|
||||
echo "$(date): Starting main monitoring loop..." >> /data/crash.log
|
||||
|
||||
HEARTBEAT=0
|
||||
while true; do
|
||||
HEARTBEAT=$((HEARTBEAT + 1))
|
||||
if [ $HEARTBEAT -ge 120 ]; then
|
||||
echo "$(date): [Heartbeat] Monitoring active, stable_count=$(cat $STABLE_COUNT_FILE)" >> /data/crash.log
|
||||
HEARTBEAT=0
|
||||
fi
|
||||
|
||||
if ! ps | grep -v grep | grep -v e_player_wrapper | grep e_player > /dev/null; then
|
||||
# 进程不存在,崩溃了
|
||||
echo 0 > "$STABLE_COUNT_FILE" # 重置稳定计数
|
||||
|
||||
COUNT=$(cat "$CRASH_COUNT_FILE")
|
||||
COUNT=$((COUNT + 1))
|
||||
echo $COUNT > "$CRASH_COUNT_FILE"
|
||||
|
||||
echo "$(date): e_player crashed, count: $COUNT" >> /data/crash.log
|
||||
|
||||
if [ $COUNT -ge $MAX_CRASH ]; then
|
||||
echo "$(date): Crash count exceeded $MAX_CRASH, restoring from factory..." >> /data/crash.log
|
||||
|
||||
# 从factory恢复文件
|
||||
if [ -f /system/factory/e_player ]; then
|
||||
cp /system/factory/e_player /data/e_player
|
||||
chmod +x /data/e_player
|
||||
echo "$(date): Restored e_player from factory" >> /data/crash.log
|
||||
fi
|
||||
|
||||
if [ -f /system/factory/lbh_client ]; then
|
||||
cp /system/factory/lbh_client /data/lbh_client
|
||||
chmod +x /data/lbh_client
|
||||
echo "$(date): Restored lbh_client from factory" >> /data/crash.log
|
||||
fi
|
||||
|
||||
# 重置崩溃计数,重新开始
|
||||
echo 0 > "$CRASH_COUNT_FILE"
|
||||
echo "$(date): Reset crash count, retrying..." >> /data/crash.log
|
||||
fi
|
||||
|
||||
echo "$(date): Restarting e_player..." >> /data/crash.log
|
||||
killall -9 e_player 2>/dev/null
|
||||
sleep 1
|
||||
|
||||
export LD_LIBRARY_PATH=/data/bin/libs:/vendor/qua/lib:/lib:/usr/lib:$LD_LIBRARY_PATH
|
||||
cd /data
|
||||
/data/e_player &
|
||||
sleep 3
|
||||
else
|
||||
# 进程存在,累加稳定计数
|
||||
STABLE=$(cat "$STABLE_COUNT_FILE")
|
||||
STABLE=$((STABLE + 1))
|
||||
echo $STABLE > "$STABLE_COUNT_FILE"
|
||||
|
||||
# 如果稳定运行120秒,重置崩溃计数
|
||||
if [ $STABLE -ge $STABLE_CHECKS ]; then
|
||||
COUNT=$(cat "$CRASH_COUNT_FILE")
|
||||
if [ $COUNT -gt 0 ]; then
|
||||
echo "$(date): e_player stable, resetting crash count" >> /data/crash.log
|
||||
echo 0 > "$CRASH_COUNT_FILE"
|
||||
fi
|
||||
echo 0 > "$STABLE_COUNT_FILE" # 重置稳定计数,下次再累计
|
||||
fi
|
||||
fi
|
||||
|
||||
sleep $CHECK_INTERVAL
|
||||
done
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
::sysinit:/etc/init.d/rcS
|
||||
::respawn:-/bin/sh
|
||||
::restart:/sbin/init
|
||||
::respawn:/bin/e_player_wrapper
|
||||
#::respawn:-/bin/daemon
|
||||
|
||||
Loading…
Reference in New Issue
Block a user