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

安卓Termux中Python脚本出错/断网时自动重启及缓存复用问题咨询

Termux环境下Python脚本不间断运行解决方案

1. 报错、崩溃、网络断开时自动重启实现

你当前使用的重启脚本不生效的核心原因是:os.system运行子进程时,即使子进程报错崩溃退出,只会返回非0的退出码,不会触发Python异常,因此你写的except分支永远不会执行。

修复后的重启脚本如下

from time import sleep
import os
import subprocess

restart_timer = 2
# 可替换为你业务依赖的服务地址,确保网络检测符合实际需求
ping_target = "114.114.114.114"

def is_network_available():
    # 执行一次ping检测,超时时间3秒
    return subprocess.run(
        ["ping", "-c", "1", "-W", "3", ping_target],
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL
    ).returncode == 0

def run_monitor():
    while True:
        # 网络异常直接触发重启流程
        if not is_network_available():
            print("网络连接丢失,等待重试")
            sleep(restart_timer)
            continue
        # 运行目标脚本,拿到退出码
        exit_code = os.system("python mylooop.pyc")
        print(f"脚本异常退出,退出码:{exit_code},{restart_timer}秒后自动重启")
        sleep(restart_timer)

if __name__ == "__main__":
    run_monitor()

额外保活配置

为了避免安卓系统杀掉Termux进程,需要做如下配置:

  • 执行pkg install termux-api安装Termux API工具,随后运行termux-wake-lock持有CPU唤醒锁,防止系统休眠
  • 进入安卓系统应用管理页面,找到Termux,关闭电池优化,允许后台活动

2. 复用上次运行缓存实现重启

能否复用缓存取决于原脚本的缓存实现逻辑:

  • 如果原mylooop.pyc已经将缓存数据持久化到本地文件(比如json、pickle、sqlite等格式的缓存文件),不需要做额外修改,重启时脚本会自动读取本地缓存恢复运行状态
  • 如果原脚本的缓存仅存储在进程内存中,没有做本地持久化,按以下优先级处理:
    • 如有原脚本源码,在脚本中添加持久化逻辑:每隔固定时间将内存中的缓存数据序列化写入本地文件,脚本启动时优先读取本地文件恢复缓存
    • 如无原脚本源码,可尝试安装criu工具做进程快照:执行pkg install criu安装,定期对运行中的mylooop进程做快照,崩溃后从快照恢复进程状态,该方案兼容性较差,优先选择修改原脚本做持久化

内容的提问来源于stack exchange,提问作者Gani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:12:00