红米Note7开机自动运行Shell脚本问题求助
我来帮你梳理问题并给出针对性的解决方案:
一、你的service.rc配置错误分析
你当前的mypackagepipefail.rc存在几个关键语法和结构问题,导致服务无法正常启动:
- 启动指令格式错误:
start /system/bin/runpipefail不符合service.rc规范,正确的写法是先定义服务名称,再通过start 服务名启动,不能直接写脚本路径。 - 指令位置错误:
user system、group system属于服务的属性,应该放在service块内部,而不是全局位置;readproc是用于读取进程状态的指令,放在当前位置毫无意义,且会干扰服务定义。 - 缺少完整的服务块定义:service.rc需要明确的
service块来描述服务的路径、权限、生命周期等属性。
修正后的service.rc配置
创建/system/etc/init/mypipefail.rc,内容如下:
# 定义循环执行的服务 service mypipefail /system/bin/runpipefail class main # 归类到main服务组,随系统核心服务启动 user system # 以system用户身份运行 group system# 归属system用户组 disabled # 禁止自动启动,由on boot触发启动 # 开机时启动服务 on boot start mypipefail
配套操作
- 确保
/system/bin/runpipefail的权限为可执行:chmod 755 /system/bin/runpipefail - 重启设备后,可通过
ps | grep runpipefail命令检查服务是否正常运行。
二、其他更稳定的开机自动运行脚本方法
考虑到MIUI对系统文件的限制和后台进程管控,推荐以下几种更可靠的方案:
方法1:Magisk模块启动(强烈推荐)
如果你的ROOT是通过Magisk获取的,用Magisk的service.d目录启动脚本是最稳定的方式,不会被系统更新或MIUI的管控机制影响:
- 创建一个Magisk模块结构的文件夹(比如命名为
AutoRunInstrument),包含以下文件:- module.prop(模块描述文件):
id=autorun_instrument name=Auto Run Instrument Script version=1.0 author=Haryono Sariputra description=Auto run the instrument test script on device boot - update-binary(模块安装脚本):
#!/system/bin/sh SKIPUNZIP=1 # 复制脚本到system目录 unzip -o "$ZIPFILE" "runpipefail" -d "/system/bin/" chmod 755 /system/bin/runpipefail # 创建service.d启动脚本 mkdir -p /data/adb/service.d cat > /data/adb/service.d/start_instrument.sh <<EOF #!/system/bin/sh # 后台启动脚本,避免阻塞系统启动 /system/bin/runpipefail & EOF chmod 755 /data/adb/service.d/start_instrument.sh - runpipefail(你的原脚本文件)
- module.prop(模块描述文件):
- 将这个文件夹压缩为ZIP包,在Magisk Manager中刷入该模块,重启设备后脚本会自动运行。
方法2:Tasker(ROOT权限版)
如果你习惯用可视化工具管理自动化任务,可以用Tasker实现:
- 安装Tasker并授予ROOT权限。
- 创建一个Profile,触发条件选择
Event > System > Device Boot。 - 关联一个Task,在Task中添加
Shell动作,勾选Use Root,输入脚本的执行命令:/system/bin/runpipefail,并勾选Background让脚本后台运行。 - 保存配置后,开机时Tasker会自动触发该任务。
方法3:Termux开机启动(适合Termux用户)
如果你已经安装了Termux,可以利用它的开机启动功能:
- 在Termux中安装
termux-boot包:pkg install termux-boot - 创建启动脚本:
写入内容:mkdir -p ~/.termux/boot nano ~/.termux/boot/start_instrument.sh#!/data/data/com.termux/files/usr/bin/sh /system/bin/runpipefail & - 给脚本加可执行权限:
chmod 755 ~/.termux/boot/start_instrument.sh - 重启设备后,Termux会自动启动并执行该脚本。
额外注意事项
- 确保你的测试包
com.airasia.mobile.test已正确安装,且签名与主应用一致,否则am instrument命令会执行失败。 - 循环脚本建议添加短延时(比如
sleep 1),避免过度消耗设备资源:while true do _stopnow am instrument -w -r -e debug false -e class com.airasia.mobile.BigpayTest com.airasia.mobile.test/android.support.test.runner.AndroidJUnitRunner sleep 1 # 添加延时 done - SManager被Killed是因为MIUI的后台进程管控机制,系统会自动清理无白名单的后台应用,因此系统级的启动方式(Magisk、service.rc)更可靠。
内容的提问来源于stack exchange,提问作者Haryono Sariputra
相关产品推荐
相关产品推荐

