215: meow_font.c 流式分块解码(gbk峰值40→23.5MB, 逐字节校验一致) + 多字体槽5→4+16MB驻留预算; 量化: gbk稳态驻留17.3MB vs common 4.2MB(OOM主因); meow_font.a→67113c03 meow_ui.a→223d5401 216: bootmenu让位(sysui在则start launcher让位, 不在则exec兜底) + S70预置launcher.conf enabled=1(+旧设备升级迁移); launcher崩溃可自动拉起; bootmenu 4441822d / S70 e435affc / S90 e0ace111 216注: S70早启动与选单共存为真机重点观察项
107 lines
4.7 KiB
Bash
107 lines
4.7 KiB
Bash
#!/bin/sh
|
||
#
|
||
# S70meow_sysui - MeowOS 系统进程总监(Supervisor Tree 顶层)
|
||
#
|
||
# 位置:**最早**(早于 S84ssh / S89meow_svcd / S90meow_bootmenu)。
|
||
# * 定案启动链:meow_sysui 先起(S70)→ meow_svcd(由 sysui 拉起)→ 各项服务子进程。
|
||
# * S90meow_bootmenu `exec /usr/bin/meow_bootmenu --fork`:HibyOS 模式 fork 播放器并转监督者,
|
||
# 阻塞 rcS;MeowOS 模式在 sysui 托管下让位退出(rcS 推进,S92 见 mode=meow 跳过播放器)。
|
||
# 故 sysui 必须排在 S90 之前(S70 满足)——launcher 已在 S70 由 sysui 拉起。
|
||
#
|
||
# 职责:监管系统进程(launcher / meow_svcd / meow_mdns / …),一个崩只拉起它、绝不级联。
|
||
# 本脚本只做三件事:
|
||
# 1) 预置板载监管配置 /usr/data/meow/sysui.d/*.conf(首启建;除 launcher.conf 迁移升级外已存在不覆盖);
|
||
# 2) 拉起 meow_sysui(默认后台 daemon);
|
||
# 3) stop 时优雅停 sysui(其会 SIGTERM 被监管的 svcd 并收尸)。
|
||
#
|
||
# 红线:不 killall、不碰播放器信号、不刷机、不碰 recovery_all。sysui 自身最小依赖,
|
||
# 失败兜底(某被监管进程起不来 → 仅记日志 + 有限次重试,不阻塞其它/不拖垮自身)。
|
||
#
|
||
case "$1" in
|
||
start)
|
||
echo -n "Starting meow_sysui (S70): "
|
||
|
||
# 1) 预置板载监管配置(Data 区可写才建;已存在不覆盖)
|
||
if [ -d /usr/data/meow ] && [ -w /usr/data/meow ]; then
|
||
mkdir -p /usr/data/meow/sysui.d
|
||
if [ -f /usr/data/meow/sysui.d/svcd.conf ]; then
|
||
echo -n "svcd.conf exists "
|
||
else
|
||
cat > /usr/data/meow/sysui.d/svcd.conf <<'EOF'
|
||
# meow_sysui 监管条目:meow_svcd(服务管理器)。系统进程总监 → svcd 被监管 → 服务为 svcd 子进程。
|
||
# 语义同 services.d:key=value,'#'/';' 注释,未知键忽略。无 trigger——enabled=1 即常驻监护。
|
||
exec=/usr/bin/meow_svcd
|
||
args=-f
|
||
enabled=1
|
||
restart=always
|
||
backoff_ms=3000
|
||
max_restart=5
|
||
EOF
|
||
chmod 644 /usr/data/meow/sysui.d/svcd.conf
|
||
echo -n "provisioned svcd.conf "
|
||
fi
|
||
# launcher 监管(M2.83 迁移):已交 sysui 托管——bootmenu 在 MeowOS 模式让位(sysui 在则
|
||
# 不再 exec launcher,lifecycle 归 sysui:崩→sysui 按 restart=always 重启;bootmenu 仅在
|
||
# sysui 不在时兜底 exec)。故此处 enabled=1。检测到旧版(enabled=0,bootmenu 时代)→ 升级。
|
||
# mdns 是 svcd 的服务子进程,由 svcd 负责,本阶段不直接监管(或作兜底条目,默认关)。
|
||
LAUNCHER_UPGRADE=''
|
||
if [ -f /usr/data/meow/sysui.d/launcher.conf ]; then
|
||
if grep -qE '^[[:space:]]*enabled[[:space:]]*=[[:space:]]*0([[:space:]]|#|$)' /usr/data/meow/sysui.d/launcher.conf; then
|
||
LAUNCHER_UPGRADE=1
|
||
else
|
||
echo -n "launcher.conf exists "
|
||
fi
|
||
fi
|
||
if [ -n "$LAUNCHER_UPGRADE" ] || [ ! -f /usr/data/meow/sysui.d/launcher.conf ]; then
|
||
cat > /usr/data/meow/sysui.d/launcher.conf <<'EOF'
|
||
# meow_sysui 监管条目:launcher(系统 UI 渲染宿主)。系统进程总监 → launcher 被监管。
|
||
# 语义同 services.d:key=value,'#'/';' 注释,未知键忽略。无 trigger——enabled=1 即常驻监护。
|
||
# M2.83 launcher 监管迁移:bootmenu 在 MeowOS 模式让位(sysui 在则不 exec launcher),
|
||
# launcher 生命周期归 sysui:崩→sysui 按 restart=always 重启;bootmenu 仅在 sysui 不在时兜底。
|
||
exec=/usr/bin/meow_launcherd
|
||
args=
|
||
enabled=1
|
||
restart=always
|
||
backoff_ms=3000
|
||
max_restart=5
|
||
EOF
|
||
chmod 644 /usr/data/meow/sysui.d/launcher.conf
|
||
if [ -n "$LAUNCHER_UPGRADE" ]; then
|
||
echo -n "upgraded launcher.conf (enabled 0->1) "
|
||
else
|
||
echo -n "provisioned launcher.conf "
|
||
fi
|
||
fi
|
||
else
|
||
echo -n "skip provision (/usr/data/meow not writable) "
|
||
fi
|
||
|
||
# 2) 拉起 meow_sysui(默认后台 daemon;S89meow_svcd 会因 sysui 在而把 svcd 拉起权交还 sysui)
|
||
rm -f /tmp/meow_sysui.stop
|
||
if [ -x /usr/bin/meow_sysui ]; then
|
||
if [ -f /tmp/meow_sysui.pid ] && kill -0 "$(cat /tmp/meow_sysui.pid 2>/dev/null)" 2>/dev/null; then
|
||
echo "already running"
|
||
else
|
||
/usr/bin/meow_sysui
|
||
echo "started"
|
||
fi
|
||
else
|
||
echo "MISSING /usr/bin/meow_sysui"
|
||
fi
|
||
;;
|
||
stop)
|
||
echo -n "Stopping meow_sysui: "
|
||
touch /tmp/meow_sysui.stop
|
||
for p in $(ps | grep "[m]eow_sysui" | awk '{print $1}'); do kill "$p" 2>/dev/null; done
|
||
echo "OK"
|
||
;;
|
||
restart|reload)
|
||
;;
|
||
*)
|
||
echo "Usage: $0 {start|stop}"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
exit 0
|