【旧手机变废为宝系列】1.安装Termux华丽变身成小型服务器,能跑java
Termux 完整配置攻略:SSH 启用、JDK17 安装与 Java 服务管理
一、准备工作:安装 Termux
- 在手机应用商店(如 Google Play、F-Droid)搜索并安装 Termux
- 首次打开后,等待初始化完成,执行更新命令:
pkg update && pkg upgrade -y
二、开启 SSH 服务(支持局域网访问)
通过 SSH 可在电脑上远程操作 Termux,步骤如下:
-
安装 OpenSSH
pkg install -y openssh -
设置登录密码(SSH 登录必须,输入时无显示,输完按回车)
passwd -
启动 SSH 服务(指定端口 2222,避开低端口权限限制)
sshd -p 2222 -
查看 Termux 所在设备的局域网 IP(电脑连接需用)
ip addr show wlan0 | grep -oP '(?<=inets)d+(.d+){3}' | head -n 1- 输出示例:
192.168.1.105(记录此 IP)
- 输出示例:
-
电脑端连接方法
- Windows(PowerShell/命令提示符)或 Linux/macOS(终端)执行:
ssh 用户名@局域网IP -p 2222- 用户名可通过
whoami命令查看(如u0_a123) - 示例:
ssh u0_a123@192.168.1.105 -p 2222
- 用户名可通过
- 首次连接输入
yes确认,再输入步骤 2 设置的密码即可登录。
- Windows(PowerShell/命令提示符)或 Linux/macOS(终端)执行:
-
停止 SSH 服务(如需)
pkill sshd
三、安装 JDK 17
-
安装 OpenJDK 17
Termux 官方源提供 OpenJDK 17,直接安装:pkg install -y openjdk-17 -
验证安装
检查 Java 版本,确认安装成功:java -version- 输出包含
openjdk version "17.x.x"即表示成功。
- 输出包含
四、允许访问手机公共文件夹(Downloads 等)
Termux 需授权才能访问手机存储(如 Downloads、Pictures),步骤如下:
-
执行存储授权命令
termux-setup-storage- 手机会弹出权限请求,点击 允许。
-
访问公共文件夹
授权后,手机存储会映射到 Termux 的~/storage目录:- 下载文件夹(Downloads):
~/storage/downloads - 图片文件夹:
~/storage/pictures - 示例:查看下载文件夹内容
ls ~/storage/downloads
- 下载文件夹(Downloads):
五、编写脚本:自动管理 Java 服务(启动/关闭切换)
此脚本可根据端口占用情况,自动关闭已有服务或启动新服务(解决之前的 AF_INET 权限问题)。
1. 创建脚本文件
nano ~/toggle_java_service.sh
2. 粘贴脚本内容
#!/data/data/com.termux/files/usr/bin/bash
# 配置参数(根据实际情况修改)
PORT=20080 # 服务端口(>1000,避免权限问题)
JAR_PATH="$HOME/storage/jars/test-0.0.1-SNAPSHOT.jar" # Jar包路径(如放在storage/jars目录)
PID_FILE="$HOME/.java_service_pid" # 记录进程ID的文件
STATUS_FILE="$HOME/.java_service_status" # 记录服务状态的文件
# 确保依赖工具安装(netstat用于端口检查)
pkg install -y net-tools >/dev/null 2>&1
# 检查服务是否正在运行
check_running() {
if [ -f "$PID_FILE" ]; then
local pid=$(cat "$PID_FILE")
# 检查进程是否存在
if ps -p "$pid" >/dev/null 2>&1; then
return 0 # 运行中
else
# 清理无效状态文件
rm -f "$PID_FILE" "$STATUS_FILE"
fi
fi
return 1 # 未运行
}
# 清理占用端口的进程(适配Termux权限)
clear_port_occupation() {
echo "检查端口 $PORT 占用情况..."
# 通过netstat获取占用端口的进程ID
local pid_info=$(netstat -tulnp 2>/dev/null | grep ":$PORT ")
if [ -n "$pid_info" ]; then
# 提取PID(从"1234/java"中取数字部分)
local pid=$(echo "$pid_info" | awk '{print $7}' | sed 's//.*//')
if [ -n "$pid" ] && [[ "$pid" =~ ^[0-9]+$ ]]; then
echo "端口 $PORT 被进程 $pid 占用,正在终止..."
kill -9 "$pid" >/dev/null 2>&1
sleep 2 # 等待进程终止
echo "进程 $pid 已终止"
fi
else
echo "端口 $PORT 未被占用"
fi
}
# 启动服务
start_service() {
# 先清理端口
clear_port_occupation
# 启动Jar包(后台运行,无日志输出)
echo "启动服务中..."
nohup java -jar "$JAR_PATH" >/dev/null 2>&1 &
local new_pid=$! # 获取新进程ID
# 记录状态
echo "$new_pid" > "$PID_FILE"
echo "running" > "$STATUS_FILE"
echo "服务启动成功!进程ID: $new_pid,端口: $PORT"
}
# 停止服务
stop_service() {
local pid=$(cat "$PID_FILE")
echo "停止服务(进程ID: $pid)..."
kill -9 "$pid" >/dev/null 2>&1
# 清理状态文件
rm -f "$PID_FILE" "$STATUS_FILE"
echo "服务已停止"
}
# 主逻辑:根据当前状态切换(启动→关闭→启动...)
if check_running; then
stop_service
else
start_service
fi
3. 保存并退出
- 按
Ctrl+O→ 按回车保存 → 按Ctrl+X退出编辑器。
4. 赋予脚本执行权限
chmod +x ~/toggle_java_service.sh
5. 使用方法
- 首次运行(启动服务):
~/toggle_java_service.sh - 再次运行(关闭服务):
~/toggle_java_service.sh - 第三次运行(重新启动):重复执行上述命令即可。
六、总结
通过以上步骤,可完成 Termux 的基础配置:
- 启用 SSH 实现电脑远程控制
- 安装 JDK 17 运行 Java 程序
- 访问手机公共文件夹(如下载目录)
- 通过脚本一键管理 Java 服务的启动/关闭
所有操作均适配 Termux 非 root 环境,避免权限问题。如需调整端口或 Jar 包路径,修改脚本中的 PORT 和 JAR_PATH 变量即可。










