Files
MeowOS-For-R3P2/patch_v2/meow_svcd/S89meow_svcd
T

265 lines
10 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
#
# S89meow_svcd - MeowOS 服务管理器协同启动 + 主机名应用 + 板载服务预置
#
# 位置:S70meow_sysui 之后、S90meow_bootmenu 之前(S70 < S84 < S89 < S90)。
# * rcS 顺序执行 /etc/init.d/S??*,而 S90meow_bootmenu 里 `exec /usr/bin/meow_bootmenu
# --fork` 会阻塞 rcS(选单后 exec meow_launcherd 或 fork 播放器监督),故任何 S90
# 之后的 init.d(如 S91/S92)**都不会执行**——svcd 必须排在 S90 之前。
# * 本脚本只装「稳定框架/KB级设置」:主机名 + 板载服务配置
# (/usr/data/meow/services.d/,Data 区,首启预置 meow_mdns.conf + meow_svc_perf.conf +
# meow_svc_power.conf —— 后者为框架专项服务,trigger=boot 恒存在即启动)。
# * **svcd 拉起权**:若 meow_sysui(系统进程总监)已运行 → svcd 由 sysui 监管拉起
# (sysui.d/svcd.conf),本脚本仅在其已运行时 `meow_svcd reload` 让 svcd 补载 meow_mdns.conf,
# 不重复拉起、不重挂(避免与 sysui 双重监护 svcd)。仅当 **sysui 未运行**时才回退到
# 现网的「重挂循环」自监护(旧固件/无 sysui 场景,向后兼容)。
#
# 红线:不 killall、不碰播放器信号、不刷机。svcd 以 -f 前台被 sysui(或重挂循环)拉起;
# 服务本身(mdnsd)由 svcd 按 restart=on-fail 托管。
#
case "$1" in
start)
echo -n "Starting meow_svcd (S89): "
# 1) 应用主机名:读板载设置 system.hostname(settings.conf),缺省 meowos。
# 须早于 meow_mdns 启动(mdnsd 默认用 gethostname() 公布 <host>.local)。
host="meowos"
if [ -f /usr/data/meow/settings.conf ]; then
v=$(awk -F= '$1 ~ /^[[:space:]]*system\.hostname[[:space:]]*$/ {gsub(/[[:space:]]/,"",$2); print $2; exit}' /usr/data/meow/settings.conf)
[ -n "$v" ] && host="$v"
fi
# 仅允许 RFC1035 首标签字符(A-Za-z0-9 和 '-'/'.'/'_'),否则回退 meowos
case "$host" in
''|*[!A-Za-z0-9_.-]*) host="meowos" ;;
esac
sethostname "$host" 2>/dev/null || hostname "$host" 2>/dev/null
echo -n "host=$host "
# 2) 首启预置板载 meow_mdns.conf(Data 区可写才建;已存在不覆盖)
if [ -d /usr/data/meow ] && [ -w /usr/data/meow ]; then
mkdir -p /usr/data/meow/services.d
# 服务名统一 meow_*(M6.1 用户定案):旧 mdnsd.conf 迁移 → meow_mdns.conf
if [ -f /usr/data/meow/services.d/mdnsd.conf ]; then
if [ -x /usr/bin/meow_svcd ]; then
/usr/bin/meow_svcd stop mdnsd 2>/dev/null
fi
rm -f /usr/data/meow/services.d/mdnsd.conf
echo -n "renamed mdnsd.conf->meow_mdns.conf "
fi
if [ -f /usr/data/meow/services.d/meow_mdns.conf ]; then
echo -n "meow_mdns.conf exists "
else
cat > /usr/data/meow/services.d/meow_mdns.conf <<'EOF'
exec=/usr/bin/meow_mdns
args=
enabled=1
restart=on-fail
backoff_ms=2000
max_restart=5
trigger=boot
cap=
EOF
chmod 644 /usr/data/meow/services.d/meow_mdns.conf
echo -n "provisioned meow_mdns.conf "
fi
else
echo -n "skip meow_mdns.conf (/usr/data/meow not writable) "
fi
# 2b) 首启预置板载**专项服务**配置(性能/电源;trigger=boot 恒存在即启动,拔卡保留)。
# perf=on-fail(纯读组,崩即拉起);power=always(系统动作服务应随时可用)。
if [ -d /usr/data/meow ] && [ -w /usr/data/meow ]; then
mkdir -p /usr/data/meow/services.d
if [ -f /usr/data/meow/services.d/meow_svc_perf.conf ]; then
echo -n "perf.conf exists "
else
cat > /usr/data/meow/services.d/meow_svc_perf.conf <<'EOF'
exec=/usr/bin/meow_svc_perf
args=
enabled=1
restart=on-fail
backoff_ms=2000
max_restart=5
trigger=boot
cap=
EOF
chmod 644 /usr/data/meow/services.d/meow_svc_perf.conf
echo -n "provisioned perf.conf "
fi
if [ -f /usr/data/meow/services.d/meow_svc_power.conf ]; then
echo -n "power.conf exists "
else
cat > /usr/data/meow/services.d/meow_svc_power.conf <<'EOF'
exec=/usr/bin/meow_svc_power
args=
enabled=1
restart=always
backoff_ms=2000
max_restart=5
trigger=boot
cap=
EOF
chmod 644 /usr/data/meow/services.d/meow_svc_power.conf
echo -n "provisioned power.conf "
fi
if [ -f /usr/data/meow/services.d/meow_crash.conf ]; then
echo -n "crash.conf exists "
else
cat > /usr/data/meow/services.d/meow_crash.conf <<'EOF'
exec=/usr/bin/meow_crash
args=
enabled=1
restart=on-fail
backoff_ms=2000
max_restart=5
trigger=boot
cap=
EOF
chmod 644 /usr/data/meow/services.d/meow_crash.conf
echo -n "provisioned crash.conf "
fi
# 服务名统一 meow_*(M6.1 用户定案):旧 audiod.conf 迁移 → meow_audiod.conf
if [ -f /usr/data/meow/services.d/audiod.conf ]; then
if [ -x /usr/bin/meow_svcd ]; then
/usr/bin/meow_svcd stop audiod 2>/dev/null
fi
rm -f /usr/data/meow/services.d/audiod.conf
echo -n "renamed audiod.conf->meow_audiod.conf "
fi
if [ -f /usr/data/meow/services.d/meow_audiod.conf ]; then
echo -n "meow_audiod.conf exists "
else
cat > /usr/data/meow/services.d/meow_audiod.conf <<'EOF2'
exec=/usr/bin/meow_audiod
args=
enabled=1
restart=on-fail
backoff_ms=2000
max_restart=5
trigger=manual
cap=
EOF2
chmod 644 /usr/data/meow/services.d/meow_audiod.conf
echo -n "provisioned meow_audiod.conf "
fi
# meow_route 退役(并入 meow_audiod,AUDIOD_DESIGN.md §5):清理旧固件遗留的
# meow_route.conf(trigger=boot 会拉起已被固件移除的 /usr/bin/meow_route → 重启循环)。
if [ -f /usr/data/meow/services.d/meow_route.conf ]; then
if [ -x /usr/bin/meow_svcd ]; then
/usr/bin/meow_svcd stop meow_route 2>/dev/null
fi
rm -f /usr/data/meow/services.d/meow_route.conf
echo -n "removed stale meow_route.conf "
fi
if [ -f /usr/data/meow/services.d/meow_amsd.conf ]; then
echo -n "amsd.conf exists "
else
cat > /usr/data/meow/services.d/meow_amsd.conf <<'EOF'
exec=/usr/bin/meow_amsd
args=
enabled=1
restart=on-fail
backoff_ms=2000
max_restart=5
trigger=boot
cap=
EOF
chmod 644 /usr/data/meow/services.d/meow_amsd.conf
echo -n "provisioned amsd.conf "
fi
# meow_powermgr(M2.97 入固件):预置 conf;热更期 exec 指 /usr/data 副本的
# 存量 conf 迁移回 /usr/bin(conf 存在即跳过的预置逻辑覆盖不到该场景)。
if [ -f /usr/data/meow/services.d/meow_powermgr.conf ]; then
if grep -q '^exec=/usr/data/meow_powermgr' /usr/data/meow/services.d/meow_powermgr.conf && [ -x /usr/bin/meow_powermgr ]; then
sed -i 's|^exec=/usr/data/meow_powermgr|exec=/usr/bin/meow_powermgr|' /usr/data/meow/services.d/meow_powermgr.conf
echo -n "migrated powermgr.conf exec->/usr/bin "
else
echo -n "powermgr.conf exists "
fi
else
cat > /usr/data/meow/services.d/meow_powermgr.conf <<'EOF'
exec=/usr/bin/meow_powermgr
args=
enabled=1
restart=on-fail
backoff_ms=2000
max_restart=5
trigger=boot
cap=
EOF
chmod 644 /usr/data/meow/services.d/meow_powermgr.conf
echo -n "provisioned powermgr.conf "
fi
# meow_netmgrd(M6.0 入固件,NETMGR_DESIGN):预置 conf;热更期 exec 指 /usr/data
# 副本的存量 conf 迁移回 /usr/bin(同 powermgr 场景)。
if [ -f /usr/data/meow/services.d/meow_netmgrd.conf ]; then
if grep -q '^exec=/usr/data/meow_netmgrd' /usr/data/meow/services.d/meow_netmgrd.conf && [ -x /usr/bin/meow_netmgrd ]; then
sed -i 's|^exec=/usr/data/meow_netmgrd|exec=/usr/bin/meow_netmgrd|' /usr/data/meow/services.d/meow_netmgrd.conf
echo -n "migrated netmgrd.conf exec->/usr/bin "
else
echo -n "netmgrd.conf exists "
fi
else
cat > /usr/data/meow/services.d/meow_netmgrd.conf <<'EOF'
exec=/usr/bin/meow_netmgrd
args=
enabled=1
restart=on-fail
backoff_ms=2000
max_restart=5
trigger=boot
cap=
EOF
chmod 644 /usr/data/meow/services.d/meow_netmgrd.conf
echo -n "provisioned netmgrd.conf "
fi
else
echo -n "skip svc confs (/usr/data/meow not writable) "
fi
# 3) svcd 拉起权判归:sysui 运行 → 交给 sysui 监管;否则回退重挂循环。
rm -f /tmp/meow_svcd.stop
sysui_alive=0
if [ -x /usr/bin/meow_sysui ] && ps | grep -q "[m]eow_sysui"; then
sysui_alive=1
fi
if [ "$sysui_alive" = "1" ]; then
# svcd 由 meow_sysui 监管拉起;此处仅补载刚预置的 meow_mdns.conf(若 svcd 已在跑)
if [ -x /usr/bin/meow_svcd ]; then
if [ -f /tmp/meow_svcd.pid ] && kill -0 "$(cat /tmp/meow_svcd.pid 2>/dev/null)" 2>/dev/null; then
/usr/bin/meow_svcd reload 2>/dev/null
echo -n "supervised by sysui (svcd running, reload) "
else
# svcd 未在跑:交给 sysui 按兜底(有限次重试)拉起,此处不干预,防双重拉起
echo -n "defer to meow_sysui (svcd down) "
fi
else
echo -n "MISSING /usr/bin/meow_svcd "
fi
elif [ -x /usr/bin/meow_svcd ]; then
if [ -f /tmp/meow_svcd.pid ] && kill -0 "$(cat /tmp/meow_svcd.pid 2>/dev/null)" 2>/dev/null; then
echo "already running"
else
( while [ ! -f /tmp/meow_svcd.stop ]; do /usr/bin/meow_svcd -f; sleep 1; done ) &
echo "started (supervisor pid $!)"
fi
else
echo "MISSING /usr/bin/meow_svcd"
fi
;;
stop)
echo -n "Stopping meow_svcd: "
touch /tmp/meow_svcd.stop
for p in $(ps | grep "[m]eow_svcd" | awk '{print $1}'); do kill "$p" 2>/dev/null; done
echo "OK"
;;
restart|reload)
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0