SD卡挂载点,执行命令的问题;恳求大大们指导~~~

在Web端设置SD卡的挂载 保存应用之后一直都是不成功,除非系统重启重新加载fstab的配置进行挂载 或者 执行 block mount 命令 都可以把SD卡进行挂载。 唯独在Web端操作不行。
 
我通过跟踪 ucitrack 文件发现了在 Web端 配置挂载点不生效的原因,如下:
ucitrack配置文件下的
option exec '/sbin/block mount' 执行无法生效

然而经过各种努力我也没找出 option exec '/sbin/block mount' 语句不执行的原因o(╥﹏╥)o

终端窗口执行/sbin/block mount执行结果如下:

1573032146(1).png

 
这里挂载的8G的SD卡,格式EXT4-fs
 
我在网上翻贴时候看到很多人遇到了类似的情况,但是都没有解决
各种帖子贴图;

1573032410(1).png


1573032483(1).png

 
有哪位大神运到过这种现象啊,指导一下啊!Thanks♪(・ω・)ノ~
 
已邀请:

xqy281

赞同来自: xzmu noel

找到原因了!
 
喜大普奔~~~~~(*^▽^*)
 
是这样的;
 
openwrt 18.06版本已经放弃了 luci-reload 脚本 作为 ucitrack 配置文件 加载执行方式。
15的旧版本几乎都是以luci-reload 脚本作为枢纽的,这就是为啥我按照网上的资料一直跟踪luci-reload 脚本 却毫无结果。
 
取而代之是用 procd 作为执行脚本与配置文件的关联更新。
 
procd是OpenWrt使用的新的进程管理服务,用C语言编写。它持续跟踪从init脚本中启动的进程(通过ubus调用),并且可以在配置/环境中没有更改时避免无谓的服务重启请求。就是说,如果您用procd管理你的所有初始启动的服务程序,如果再次收到重启该init服务进程的请求时,procd若是检查发现该init服务进程的配置/环境没有改变就可以不执行这个重启动作。
 
原版脚本的编写作者如是说道:
luci-base: add transitional /etc/init.d/ucitrack
Ship an /etc/init.d/ucitrack for spawning a virtual service with the sole
purpose to track the configurations and dependencies formerly handled by
luci-reload.

Once all LuCI supported services ship with procd compatible init scripts,
the uci track support can be dropped.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
pull/1769/head

然后看一下脚本源码 带入参数 为什么 /sbin/block mount 这个命令就是不执行呢?
#!/bin/sh /etc/rc.common

START=80
USE_PROCD=1

register_init() {
local config="$1"
local init="$2"
shift; shift

if [ -x "$init" ] && "$init" enabled && ! grep -sqE 'USE_PROCD=.' "$init"; then
logger -t "ucitrack" "Setting up /etc/config/$config reload trigger for non-procd $init"
procd_add_config_trigger "config.change" "$config" "$init" "$@"
fi
}

register_trigger() {
local sid="$1"
local config init exec affects affected

config_get config "$sid" TYPE
config_get init "$sid" init
config_get exec "$sid" exec
config_get affects "$sid" affects

if [ -n "$init" ]; then
register_init "$config" "/etc/init.d/$init" "reload"
fi

if [ -n "$exec" ]; then
case "$exec" in
/etc/init.d/*)
set -- $exec
register_init "$config" "$@"
;;
*)
logger -t "ucitrack" "Setting up non-init /etc/config/$config reload handler: $exec"
procd_add_config_trigger "config.change" "$config" "$exec"
;;
esac
fi

for affected in $affects; do
logger -t "ucitrack" "Setting up /etc/config/$config reload dependency on /etc/config/$affected"
procd_add_config_trigger "config.change" "$affected" \
ubus call service event \
"$(printf '{"type":"config.change","data":{"package":"%s"}}' $config)"
done
}

service_triggers() {
config_foreach register_trigger
}

start_service() {
config_load ucitrack
}



可以看到配置条件为 非  /etc/init.d 时 加载服务是这样子的
procd_add_config_trigger "config.change" "$config" "$exec"


很显然 最后面还缺了一个参数,缺了一个动作行为的参数。
 
 
只要像这样稍加修改一下脚本就能正常加载 /sbin/block mount 指令了
case "$exec" in
/etc/init.d/*)
set -- $exec
register_init "$config" "$@"
;;
*)

set -- $exec
local cmd="$1"; shift

logger -t "ucitrack" "Setting up non-init /etc/config/$config reload handler: $cmd - $@"
procd_add_config_trigger "config.change" "$config" "$cmd" "$@"

;;
esac

以后就可以愉快的在Web端设置挂载点了~
(*^▽^*)~~
             ~~ ( ̄▽ ̄)~*ヾ(◍°∇°◍)ノ゙ヾ(๑╹◡╹)ノ"٩(๑>◡<๑)۶ (。◕ˇ∀ˇ◕)(๑´ㅂ`๑) ヽ(゚∀゚)メ(゚∀゚)ノ 

要回复问题请先登录注册