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

85 lines
3.2 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 服务管理器开机自启 + 主机名应用 + 板载服务预置
#
# 位置:S84ssh 之后、S90meow_bootmenu 之前(S80 < 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级设置」:meow_svcd(固件 /usr/bin/)+ 板载服务配置
# (/usr/data/meow/services.d/,Data 区,首启预置 mdnsd.conf)+ 应用主机名。
#
# 红线:不 killall、不碰播放器信号、不刷机。svcd 以 -f 前台被本脚本重挂循环拉起
#(失败降级不死——若 svcd 死,其所托管服务已是独立子进程、被 init 收养继续运行);
# 服务本身(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) 首启预置板载 mdnsd.conf(Data 区可写才建;已存在不覆盖)
if [ -d /usr/data/meow ] && [ -w /usr/data/meow ]; then
mkdir -p /usr/data/meow/services.d
if [ -f /usr/data/meow/services.d/mdnsd.conf ]; then
echo -n "mdnsd.conf exists "
else
cat > /usr/data/meow/services.d/mdnsd.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/mdnsd.conf
echo -n "provisioned mdnsd.conf "
fi
else
echo -n "skip mdnsd.conf (/usr/data/meow not writable) "
fi
# 3) 拉起 meow_svcd(-f 前台,重挂循环防死;/tmp/meow_svcd.stop 标记防停循环)
rm -f /tmp/meow_svcd.stop
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
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