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