You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

红米Note7开机自动运行Shell脚本问题求助

我来帮你梳理问题并给出针对性的解决方案:

一、你的service.rc配置错误分析

你当前的mypackagepipefail.rc存在几个关键语法和结构问题,导致服务无法正常启动:

  1. 启动指令格式错误:start /system/bin/runpipefail不符合service.rc规范,正确的写法是先定义服务名称,再通过start 服务名启动,不能直接写脚本路径。
  2. 指令位置错误:user system、group system属于服务的属性,应该放在service块内部,而不是全局位置;readproc是用于读取进程状态的指令,放在当前位置毫无意义,且会干扰服务定义。
  3. 缺少完整的服务块定义: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

配套操作

  1. 确保/system/bin/runpipefail的权限为可执行:
    chmod 755 /system/bin/runpipefail
    
  2. 重启设备后,可通过ps | grep runpipefail命令检查服务是否正常运行。
二、其他更稳定的开机自动运行脚本方法

考虑到MIUI对系统文件的限制和后台进程管控,推荐以下几种更可靠的方案:

方法1:Magisk模块启动(强烈推荐)

如果你的ROOT是通过Magisk获取的,用Magisk的service.d目录启动脚本是最稳定的方式,不会被系统更新或MIUI的管控机制影响:

  1. 创建一个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(你的原脚本文件)
  2. 将这个文件夹压缩为ZIP包,在Magisk Manager中刷入该模块,重启设备后脚本会自动运行。

方法2:Tasker(ROOT权限版)

如果你习惯用可视化工具管理自动化任务,可以用Tasker实现:

  1. 安装Tasker并授予ROOT权限。
  2. 创建一个Profile,触发条件选择Event > System > Device Boot。
  3. 关联一个Task,在Task中添加Shell动作,勾选Use Root,输入脚本的执行命令:/system/bin/runpipefail,并勾选Background让脚本后台运行。
  4. 保存配置后,开机时Tasker会自动触发该任务。

方法3:Termux开机启动(适合Termux用户)

如果你已经安装了Termux,可以利用它的开机启动功能:

  1. 在Termux中安装termux-boot包:
    pkg install termux-boot
    
  2. 创建启动脚本:
    mkdir -p ~/.termux/boot
    nano ~/.termux/boot/start_instrument.sh
    
    写入内容:
    #!/data/data/com.termux/files/usr/bin/sh
    /system/bin/runpipefail &
    
  3. 给脚本加可执行权限:
    chmod 755 ~/.termux/boot/start_instrument.sh
    
  4. 重启设备后,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:04:22