#!/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