系统基建线(agent-139): svcd subreaper加固 + meow_sysui总监 + 启动链
- svcd: 审计确认现网已子进程化(fork+execv+setpgid+waitpid+SIGCHLD+set_cloexec,无system()); 增量 prctl(PR_SET_CHILD_SUBREAPER) 代收孤儿孙进程 → fb2d608b - meow_sysui(新增): 系统进程总监, 仿svcd成熟模式(信号自管道/poll/双探测kill/waitpid/subreaper/状态机), 监护自己fork+exec进程, 按sysui.d/<name>.conf逐条拉起, 无级联/有限次兜底/主循环绝不exit/空配置空转 → 173013cc - 启动链 S70meow_sysui → S89meow_svcd → S90meow_bootmenu; svcd拉起权判归(sysui在→交监管,不在→回退现网重挂循环) - 宿主集成测试过(常崩/稳定隔离/无级联/subreaper收尸/端到端); meow_ui.a未动 - 需加到固件打包(build_fw_apps_m267.sh): sysui→/usr/bin/meow_sysui, svcd覆盖(fb2d608b), S70+S89; 校验 svcd 762e84d0→fb2d608b, 新增 sysui 173013cc
This commit is contained in:
1 parent
c4e648be0e
commit
2a6c4e97c5
9 files changed
+1391
-8
No files matched your search
@@ -0,0 +1,92 @@
|
||||
#!/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` 会阻塞 rcS,故任何 S90 之后
|
||||
# 的 init.d 都不执行——sysui 必须排在 S90 之前(S70 满足)。
|
||||
#
|
||||
# 职责:监管系统进程(launcher / meow_svcd / meow_mdns / …),一个崩只拉起它、绝不级联。
|
||||
# 本脚本只做三件事:
|
||||
# 1) 预置板载监管配置 /usr/data/meow/sysui.d/*.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 当前由 S90meow_bootmenu 的 exec 拥有生命周期;待 bootmenu 让位后交 sysui。
|
||||
# 此处仅登记(enabled=0),避免双重拉起。mdns 是 svcd 的服务子进程,由 svcd 负责,
|
||||
# 本阶段不直接监管(或作兜底条目,默认关)。
|
||||
if [ -f /usr/data/meow/sysui.d/launcher.conf ]; then
|
||||
echo -n "launcher.conf exists "
|
||||
else
|
||||
cat > /usr/data/meow/sysui.d/launcher.conf <<'EOF'
|
||||
# 预留:launcher(系统 UI 渲染宿主)。现网由 S90meow_bootmenu exec 拥有 → 启用前需 bootmenu 让位。
|
||||
# 真把 launcher 交给 sysui 监管后,把 enabled=1(并停用 bootmenu 的 exec launcher 路径)。
|
||||
exec=/usr/bin/meow_launcherd
|
||||
args=
|
||||
enabled=0
|
||||
restart=always
|
||||
backoff_ms=3000
|
||||
max_restart=5
|
||||
EOF
|
||||
chmod 644 /usr/data/meow/sysui.d/launcher.conf
|
||||
echo -n "provisioned launcher.conf "
|
||||
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
|
||||
Reference in new issue
Block a user