如何使用 Termux Boot 将旧 Android 手机变成独立服务器
我们很多人家里都有一部积灰的旧 Android 智能手机。屏幕稍微有点碎裂,电池不太耐用,也卖不出好价钱。然而,它内部有一颗功能完好的四核处理器和几 GB 的内存。这些硬件使其成为运行 Telegram 机器人、轻量级自动化脚本或本地 SSH 节点的出色家庭服务器。
Termux 终端早已将 Android 变成了一个完整的 Linux 环境。但有一个烦人的问题。如果智能手机因电池耗尽而关机或更新后重启,所有正在运行的进程都会终止。你必须手动打开应用,输入命令,从头重启服务。
Termux:Boot 插件有助于解决这个问题。它是一个实用工具,可挂钩到操作系统的启动事件并运行用户脚本。
Android 中的自动启动是如何工作的
Android 对后台进程有严格限制。未经用户直接同意和特殊权限,系统不允许应用随操作系统启动。
Termux:Boot 作为系统事件 BOOT_COMPLETED 和 Termux 内部 Linux 环境之间的桥梁。当智能手机开机时,插件从系统接收信号,查看用户指定的目录,并按顺序运行找到的可执行文件。
这里有一个关于应用签名的细节。Termux 和 Termux:Boot 通过共享访问权限进行通信。由于 Android 的安全规则,两个应用必须使用相同的开发者密钥签名。
如果你从 F-Droid 安装了主 Termux,那么 Termux:Boot 插件也必须严格从 F-Droid 获取。尝试混合 Google Play 版本和 F-Droid APK 将导致访问错误。如果你想测试最新的提交,开发者会将调试版本上传到 GitHub Actions。但请记住:更改安装源需要完全卸载 Termux 及其所有插件。
分步设置
设置方案很简单。说白了就是创建一个文件夹和几个文本文件。
首先,你需要安装 Termux:Boot 插件本身。安装后,一定要在应用菜单中找到它的图标并点击一次。这将授予插件拦截系统自动启动的权限。没有这个操作,Android 将直接阻止后台启动。
然后打开 Termux 终端,创建脚本目录:
mkdir -p ~/.termux/boot/
放置在此文件夹中的所有文件都将成为自动启动场景。如果文件夹中有多个文件,插件将按字母顺序执行它们。
为防止智能手机在启动五分钟后进入深度睡眠,脚本开头使用命令 termux-wake-lock 非常有用。它强制 Android 保持 CPU 处于唤醒状态。
实用脚本示例
让我们通过几个实际场景来演示。一个常见任务是让系统在启动后立即提供 SSH 访问。
让我们创建文件 ~/.termux/boot/start-sshd:
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sshd
确保使文件可执行,否则系统将忽略它:
chmod +x ~/.termux/boot/start-sshd
现在当你重启手机时,Termux 将在后台启动 SSH 服务器。你将能够通过网络连接它,无需任何屏幕交互。
如果你使用 termux-services 包来管理系统守护进程(普通 Linux 发行版中的 systemd 等效项),启动脚本如下:
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
source /data/data/com.termux/files/usr/etc/profile.d/start-services.sh
在 ~/.termux/boot/start-services 中创建此文件,授予执行权限,所有通过 sv-enable 命令启用的服务都将自动启动。
实际用例
这个项目的主要价值在于完全自主。智能手机变成了一台安静的迷你服务器,拥有自己的内置不间断电源。
以下是几个明确的场景:
- Telegram 机器人托管。机器人随设备启动,无需持续监控即可运行。
- 通过 Syncthing 进行文件同步。手机作为 24/7 节点用于备份照片或文档。
- 家庭网络监控。脚本定期检查路由器或外部服务的可用性,并在故障时发送通知。
- 本地数据库服务器(如 SQLite 或 PostgreSQL)用于收集智能家居设备的日志。
调试和陷阱
没有完美的解决方案,Termux:Boot 也有其自身的问题。
现代 Android 固件中激进的省电模式喜欢杀死后台进程。MIUI、One UI 和 EMUI 在这方面尤其严重。为了让插件正常工作,请进入 Android 的电池设置,为 Termux 和 Termux:Boot 禁用电池优化。在类似 MIUI 的固件上,你还应在应用设置中手动允许插件自动启动。
然后值得检查日志功能。如果脚本没有启动,在脚本中直接将错误输出重定向到文件:
#!/data/data/com.termux/files/usr/bin/sh
exec 2>&1
exec 1>/sdcard/termux-boot.log
termux-wake-lock
echo "Boot completed at $(date)"
这样你就能立即看到脚本是否在环境变量路径上遇到问题,或者是否找不到所需的二进制文件。
更新应用或刷写设备后,有时需要通过桌面图标手动重新启动 Termux:Boot。
总结
Termux:Boot 是一个极其简单的插件,只有一个任务,而且做得很好。Java 源代码占用空间极小,任何熟悉基本 bash 的人都能理解其逻辑。
如果你计划用旧智能手机构建家庭服务器或紧凑型自动化系统,这个插件将在设备意外重启时为你节省时间。
相关项目