惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Spread Privacy
Spread Privacy
P
Palo Alto Networks Blog
P
Proofpoint News Feed
AI
AI
Help Net Security
Help Net Security
S
Securelist
T
Troy Hunt's Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cisco Blogs
Scott Helme
Scott Helme
Hacker News - Newest:
Hacker News - Newest: "LLM"
Vercel News
Vercel News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
GbyAI
GbyAI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
S
Security Affairs
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
T
Tenable Blog
H
Help Net Security
NISL@THU
NISL@THU
F
Fortinet All Blogs
博客园_首页
G
GRAHAM CLULEY
L
LINUX DO - 最新话题
P
Privacy International News Feed
G
Google Developers Blog
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Security Archives - TechRepublic
Security Archives - TechRepublic
The Register - Security
The Register - Security
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
量子位
C
Cyber Attacks, Cyber Crime and Cyber Security
Forbes - Security
Forbes - Security
S
Secure Thoughts
Simon Willison's Weblog
Simon Willison's Weblog
D
Docker
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
L
Lohrmann on Cybersecurity
T
Tailwind CSS Blog

博客园 - 一名程序媛呀

Anki插件开发必知必会:钩子函数与右键菜单定制 httpx 传参总报错?这次把 GET、POST、文件上传到响应处理的坑给你一次填平 从卡顿到丝滑:FastAPI 调用外部 API 的正确姿势(httpx 实战) 还在 XHR、Fetch 和 Axios 之间纠结?我踩过的坑,希望你一个都不用碰到 你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南 Uvicorn、Gunicorn 傻傻分不清?FastAPI 生产部署避坑指南 刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API 别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了 掏出手机就能搭个 WebDAV 同步服务器?这操作有点香 别只盯着GitBook了!这个文档神器让你的笔记秒变网站 写爬虫时用了代理还被封?Python 代理的那些隐藏坑,我替你踩明白了 FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好 旧手机别扔!用 Termux 搭个私人云盘,比网盘香多了 你的FastAPI又在服务器上“跑不起来”了?来,今天咱把打包这件事彻底聊透 写页面时别再把 Element Plus 整个搬进来啦!Vue3按需加载的坑我帮你踩平了 前端包管理咋选?我从npm叛逃到pnpm的血泪史(附避坑指南) 聊聊 fetch 使用中我踩过的那些坑和正确打开方式 FastApiAdmin 后端接口开发好了,前端管理界面怎么调用与显示? 给 FastApiAdmin 加个“会议纪要”模块,我把后端二次开发的坑踩了个遍 我用了FastApiAdmin后,连夜把踩过的坑都整理出来了 告别 Typora 后的新欢:我把所有笔记迁移到了 Obsidian 这个“第二大脑” 你的Agent API还在裸奔?从认证到沙箱,我用FastAPI搭了几道防线 让 FastAPI Agent 思考不阻塞:手把手教你实现异步任务与后台处理方案 让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践 FastAPI Agent 函数调用实战:我让 AI 学会了“自己动手查天气“ 初探:用 FastAPI 搭建你的第一个 AI Agent 接口 FastAPI 少有人提的实用技巧:把 Depends 依赖提到路由层,代码少写60% FastAPI 生产环境静态文件完全指南:从 /favicon.ico 404 到 HSTS 混合内容,一次全根治 用了loguru我才明白,Python日志还能这么写 FastAPI 后台任务:BackgroundTasks 的使用场景与注意事项 FastAPI配置管理避坑指南:从硬编码到 .env 与 pydantic_settings 类,连路由用法都给你捋清楚 FastAPI 文件上传避坑全指南:分块存盘、类型校验与安全兜底 FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上 FastAPI + SQLAlchemy 2.0 通用CRUD操作手册 —— 从同步到异步,一次讲透 FastAPI订单防超卖实战:从数据库锁到Saga分布式事务,这一篇给你理清了 FastAPI 生产环境避坑指南:用 Alembic 管理数据库迁移,别再手动改表结构了! FastAPI服务半夜又挂了?先别急着重启,查查你的数据库连接池“池子”是不是漏了 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 Vue 3 组合式 API 香是香,但从Vue2迁移时你可别像我当初一样踩进这 3 个深坑里 我用fastapi-scaff搭了个项目,两天工期缩到两小时,老板以为我开挂了 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! FastAPI自动生成的API文档太丑?我花了一晚上把它改成了客户愿意付费的样子 告别手写 API 胶水代码:FastAPI 与 Vue 的“契约自动机” OpenAPI 实战 FastAPI + Vue 前后端分离实战:我的项目结构“避坑指南” FastAPI + Celery 实战:异步任务里调用 Redis 和数据库的全解析,及生产级组织方案 FastAPI里玩转Redis和数据库的正确姿势,别让异步任务把你坑哭了! FastAPI + Celery 实战:异步任务的坑与解法,我帮你踩了一遍 FastAPI子应用挂载:别再让root_path坑你一夜 FastAPI项目半夜报警吵醒你?聊聊告警这事儿怎么搞! 别再数据线了!用FastAPI 5分钟搭个局域网文件+剪贴板神器 FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香! FastAPI状态共享秘籍:别再让中间件、依赖和路由“各自为政”了! FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了! 从0到1,FastAPI + PostgreSQL + Tortoise ORM 实战避坑指南 FastAPI + PostgreSQL 实战:给应用装上“缓存”和“日志”翅膀 FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招!
一名程序媛呀 · 2026-06-24 · via 博客园 - 一名程序媛呀

别再傻傻分不清直接执行、后台运行、Termux-service了!一篇给你讲透,连常见报错都给你整明白了。

摘要: Termux 里运行二进制或脚本,直接执行、后台运行、Termux-service 到底怎么选?这篇血泪经验总结手把手教你安装配置 Termux-service,避开“进程被杀”、“服务无法保活”等大坑,看完就能让脚本在手机里稳如老狗地跑起来。

🎯 开篇先吐槽:一个脚本搞崩心态的夜晚

你是不是也这么干过?在 Termux 里用 python server.py 跑了个 Flask 应用,一切正常,切出去回个微信,再切回来——进程没了,服务挂了。😤

或者看了一堆教程,终于把二进制程序跑起来了,但一锁屏就嗝屁,想弄个开机自启更是噩梦。这感觉就像你费劲煮好一锅汤,去趟厕所回来发现火灭了,锅都凉了。

别问我怎么知道的,这坑我躺过不止一次。今天就用最接地气的方式,帮你把 Termux 里运行文件的所有姿势 一网打尽,尤其是让无数人抓狂的 Termux-service

👩‍💻我是爱折腾的一名程序媛,喜欢研究全栈开发的各种实践,热爱分享踩坑后的收获与思考,也享受用代码写出各种实用小工具解决问题的快乐。

如果你也在技术这条路上向前走,关注我,愿我们能彼此陪伴,一起成为更好的自己 🌱

💎 本文能帮你解决什么

看完这篇文章,你会彻底搞懂:

🔹 Termux 里运行程序和脚本的几种方式,以及什么场景该用哪种

🔹 Termux-service 到底是什么鬼,怎么安装、配置、使用

🔹 进程被后台杀死、自启失败等常见报错的排查思路和解决方案

🗺️ 内容速览

🔹 问题背景:Termux 的运行环境和普通 Linux 到底哪里不一样

🔹 运行方式汇总:从直接执行、后台任务,到 nohup、termux-services 全家桶

🔹 核心实战:手摸手安装和配置 Termux-service,让你的脚本变成系统服务

🔹 翻车点复盘:权限、唤醒锁、PATH 问题等坑点一网打尽

🧩 第一部分:Termux 里运行个东西,咋就这么费劲?

Termux 说白了就是一个在 Android 上运行的容器化 Linux 环境,但它没有传统的 init 系统,也不享受系统级服务的“免死金牌”。
Android 的省电机制(Doze 模式、电池优化)会把后台进程当成吃电的流氓,一言不合就查杀。

所以你会遇到:

🔹 关闭终端或者锁屏后,进程直接被干掉

🔹 切换应用再回来,之前跑的任务莫名其妙消失了

🔹 用 & 放到后台的进程,依然逃不过被系统回收的命运

那到底怎么选择运行方式?别急,先给你一个全景图。

⚙️ 第二部分:运行方式全家福,一张表看懂

🧪 方式一:直接在前台运行

./binary 或者 bash script.sh

这就好比你在灶台前守着锅,你一走开火就灭了。

只在调试、临时跑一下的时候用,千万别想着这样能持久运行。

🚲 方式二:使用 & 放到后台

./binary &

看起来任务被扔到后台了,但本质上还是挂在当前 shell 会话下,终端一关进程就收尸。

这里有一点要特别注意,很多新手觉得加了 & 就万事大吉,结果睡一觉服务挂了,就是这个原因。

🛡️ 方式三:nohup 或 disown 扛住终端关闭

nohup ./binary & 或者 ./binary & disown

这样终端退出后进程不会被 SIGHUP 信号杀死。
但,听好了——这只能防止你主动关终端时进程被杀,挡不住 Android 系统在锁屏后的后台限制

我就在这上面栽过跟头,半夜服务停了,还以为程序自己崩了,查了半天 log 才发现是被系统祭天了。

🧟 方式四:termux-wake-lock 防止 CPU 休眠

先执行 termux-wake-lock 获取唤醒锁,再运行程序。

这样锁屏后 CPU 能继续保持活跃,能提高存活率,但应用本身还是可能被杀死释放内存。这是一种“强力辅助”,不是免死金牌。

👑 方式五:Termux-service 正式登场

这才是今天的重头戏。

Termux-service 实际上就是一套让 Termux 可以管理类似“系统服务”的工具集,底层通过 runitbusybox 管理进程,帮你实现:

🔹 进程挂了自动拉起来

🔹 Termux 启动后自动运行服务

🔹 用 sv 命令管理启停,像个正经 Linux 一样

官方文档虽然说明了基本用法,但根据以往的经验,直接抄容易因为目录权限或脚本环境变量问题启动失败,所以下面我会用亲手验证过的步骤带你走一遍。

🛠️ 第三部分:实战!Termux-service 安装与配置

📦 第一步:安装 termux-services

pkg update && pkg upgrade

pkg install termux-services

安装完,务必重启一次 Termux 或者重新打开一个会话,不然很多服务命令会报找不到。

📁 第二步:创建你的服务目录

服务文件需要放在 $PREFIX/var/service/<你的服务名>/ 下面。我习惯用 myserver 举例子:

mkdir -p $PREFIX/var/service/myserver

在该目录下创建一个名为 run 的可执行脚本,这就是服务的启动脚本。

重点来了,这个脚本必须在前台执行,不能自己退到后台。因为 runit 要求它监控的这个 run 进程一直活着,一旦退出就认为服务挂了。

写个最简单的例子:

#!/data/data/com.termux/files/usr/bin/bash

cd /sdcard/myapp

exec python server.py

🔸 一定要用 exec 把当前 shell 替换成你的服务进程,这样信号能正确传递。

🔸 脚本里用绝对路径,别偷懒写相对路径,否则服务启动时会因为 $PATH 不一样翻车。

✅ 第三步:赋予执行权限并启用服务

chmod +x $PREFIX/var/service/myserver/run

然后让 Termux-service 接管:

sv up myserver    # 启动服务

sv status myserver # 查看状态,显示 run: 字样就是跑起来了

设置开机自启那就更简单了,安装好 termux-services 后,只要重启一次 Termux 或重开一个会话,背后的 runsvdir 守护进程就会自动跑起来,它会监控 $PREFIX/var/service/ 这个目录。
只要你把服务目录(比如 myserver)放在里面,你一打开 Termux,它就会自动把里面所有服务拉起来,根本不用手动干预。

🔹 手机开机后自动启动服务(系统级自启)

这才是真正的“开机自启”,光靠 Termux-service 自己搞不定,必须搭档 Termux:Boot 这个插件。

pkg install termux-boot

安装 Termux:Boot 后,在 ~/.termux/boot/ 目录下放一个可执行脚本,里面写上:

#!/data/data/com.termux/files/usr/bin/bash

termux-wake-lock

sv up myserver

这样手机一开机,这个脚本就会被触发,先拿唤醒锁,再启动你的服务。这才是真·开机自启的完整链条。

📊 第四步:验证保活效果

可以先 sv down myserver 停止服务,然后再 sv up myserver 重新拉起来,接着模拟锁屏等待几分钟,再回来看状态,如果还是 run,基本就稳了。

再教一个损招,可以故意 kill 掉你的服务进程,等几秒再 sv status 看,只要配置对了,它应该自动被拉起来,原地复活。

🩹 第四部分:常见翻车现场及抢救方案

🔹 启动报错 “run: can't change directory…”

大概率是路径拼错了或者没有访问权限。Termux 访问 /sdcard 需要先执行 termux-setup-storage 授权。

🔹 服务启动了,但马上又 down 掉

多半是 run 脚本执行完直接退出了。

记住:run 脚本必须阻塞运行,直到服务本身停止。
如果你在脚本最后写了 echo "done" 就没了,那 runit 一看进程结束了,当然认为服务跪了。

我就曾经因为脚本末尾多了一个换行,导致 exec 没生效,服务秒挂,找了好一阵才恍然大悟。

🔹 锁屏后服务还是被杀了

即使用了 Termux-service,碰上凶残的系统(比如某些国产 OS),还是可能被杀。

这时候需要组合拳:
开启 Termux 的唤醒锁,再把 Termux 应用本身加入系统的“电池优化”白名单,并在多任务界面锁定应用不被清理。

工具顺手的才是最好的,我一般还会装个 Termux:Boot,让手机开机就自动启动 Termux 服务。

🔹 sv 命令提示 “command not found”

说明 termux-services 没装好,或者新开的 session 没加载环境变量。

试试 source $PREFIX/etc/profile 或者退出 Termux 重新进。

💬 最后唠两句

今天咱们从 Termux 里运行程序的各种野路子,一路聊到最正宗的 Termux-service 配置方法,这下你的脚本应该能像打不死的小强一样,安安稳稳呆在手机里为你卖命了。

其实技术这玩意儿,踩坑多了,就知道哪条路好走,哪条路有钉子。


如果你也有自己独特的保活妙招,或者被某个奇葩报错虐过,欢迎在评论区和我一起吐槽。

觉得这篇有用的话,点赞收藏加关注别犹豫,这种“填坑文”指不定哪天你就需要翻出来救命。咱们下篇见!