mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-04-23 00:27:06 +08:00
112 lines
3.5 KiB
Bash
112 lines
3.5 KiB
Bash
#!/system/bin/sh
|
||
|
||
MODDIR=${0%/*}
|
||
CONFIG_FILE="${MODDIR}/config/config.toml"
|
||
COMMAND_ARGS="${MODDIR}/config/command_args"
|
||
LOG_FILE="${MODDIR}/log.log"
|
||
MODULE_PROP="${MODDIR}/module.prop"
|
||
EASYTIER="${MODDIR}/easytier-core"
|
||
|
||
# 处理获取到的设备型号中可能出现的空格
|
||
BRAND=$(getprop ro.product.brand | tr ' ' '-')
|
||
MODEL=$(getprop ro.product.model | tr ' ' '-')
|
||
DEVICE_HOSTNAME="${BRAND}-${MODEL}"
|
||
REDIR_STATUS=""
|
||
|
||
# 更新 module.prop 文件中的 description
|
||
update_module_description() {
|
||
local status_message=$1
|
||
# 检查 module.prop 文件存在且 description 发生变化了再写入
|
||
if [ -f "${MODULE_PROP}" ]; then
|
||
local current_desc=$(grep "^description=" "${MODULE_PROP}")
|
||
local new_desc="description=[状态] ${status_message}"
|
||
if [ "${current_desc}" != "${new_desc}" ]; then
|
||
sed -i "s#^description=.*#${new_desc}#" "${MODULE_PROP}"
|
||
fi
|
||
fi
|
||
}
|
||
|
||
# 检查并初始化 TUN 设备
|
||
if [ ! -e /dev/net/tun ]; then
|
||
if [ ! -d /dev/net ]; then
|
||
mkdir -p /dev/net
|
||
fi
|
||
|
||
ln -s /dev/tun /dev/net/tun
|
||
fi
|
||
|
||
while true; do
|
||
# 获取子网转发激活状态
|
||
if [ -f "${MODDIR}/enable_IP_rule" ]; then
|
||
REDIR_STATUS="转发已激活"
|
||
else
|
||
REDIR_STATUS="转发已禁用"
|
||
fi
|
||
|
||
# 检查模块是否被禁用
|
||
if [ -f "${MODDIR}/disable" ]; then
|
||
update_module_description "主程序已关闭 | ${REDIR_STATUS}"
|
||
if pgrep -f "${EASYTIER}" >/dev/null; then
|
||
echo "开关控制 $(date "+%Y-%m-%d %H:%M:%S") 进程已存在,正在关闭"
|
||
pkill -f "${EASYTIER}"
|
||
fi
|
||
sleep 10s
|
||
continue
|
||
fi
|
||
|
||
# 检查进程是否已经在运行
|
||
if pgrep -f "${EASYTIER}" >/dev/null; then
|
||
sleep 10s
|
||
continue
|
||
fi
|
||
|
||
# 检查配置文件是否存在
|
||
if [ ! -f "${CONFIG_FILE}" ] && [ ! -f "${COMMAND_ARGS}" ]; then
|
||
update_module_description "缺少配置文件或启动参数文件"
|
||
sleep 10s
|
||
continue
|
||
fi
|
||
|
||
# 如果 config 目录下存在 command_args 文件,则读取其中的内容作为启动参数
|
||
if [ -f "${COMMAND_ARGS}" ]; then
|
||
# 启动参数模式
|
||
CMD_CONTENT=$(tr '\r\n' ' ' < "${COMMAND_ARGS}")
|
||
|
||
if echo "${CMD_CONTENT}" | grep -q "\-\-hostname"; then
|
||
FINAL_ARGS="${CMD_CONTENT}"
|
||
else
|
||
FINAL_ARGS="${CMD_CONTENT} --hostname ${DEVICE_HOSTNAME}"
|
||
fi
|
||
|
||
TZ=Asia/Shanghai "${EASYTIER}" ${FINAL_ARGS} > "${LOG_FILE}" 2>&1 &
|
||
STR_MODE="启动参数模式"
|
||
|
||
# 否则读取 config.toml 的内容作为启动参数
|
||
else
|
||
# 配置文件模式
|
||
if grep -q "^[[:space:]]*hostname[[:space:]]*=" "${CONFIG_FILE}"; then
|
||
TZ=Asia/Shanghai "${EASYTIER}" -c "${CONFIG_FILE}" > "${LOG_FILE}" 2>&1 &
|
||
else
|
||
TZ=Asia/Shanghai "${EASYTIER}" -c "${CONFIG_FILE}" --hostname "${DEVICE_HOSTNAME}" > "${LOG_FILE}" 2>&1 &
|
||
fi
|
||
|
||
STR_MODE="配置文件模式"
|
||
fi
|
||
|
||
# 等待进程启动
|
||
sleep 5s
|
||
|
||
# 启动后的扫尾工作
|
||
if pgrep -f "${EASYTIER}" >/dev/null; then
|
||
|
||
if ! ip rule show | grep -q "lookup main"; then
|
||
ip rule add from all lookup main
|
||
fi
|
||
|
||
update_module_description "主程序正在运行(${STR_MODE})| ${REDIR_STATUS}"
|
||
else
|
||
update_module_description "主程序启动失败,请检查配置文件或启动参数"
|
||
fi
|
||
|
||
sleep 10s
|
||
done |