ZeroTermux中ArchLinux Redis安装指南
ZeroTermux中ArchLinux Redis安装指南
环境背景
入标题所述,需要在Termux中安装的ArchLinux中安装redis,但是redis有以下限制:
- 平台: Termux中安装的ArchLinux
- 安装方式: 使用proot方式安装的ArchLinux
- 限制: 通过proot安装的Linux无法使用systemctl启动程序
- 问题: ArchLinux已经不再支持直接安装Redis
解决方案概述
原始方案(不适用)
从AUR安装Redis:yay -S redis- 原因:AUR中的redis包不支持aarch64架构
可行方案
- 从源码编译安装(推荐)
- 手动启动服务(由于proot环境限制,不能使用systemctl)
可能会遇到的问题:由于手机是ARM64的架构,所以会相对x86_64的架构编译较慢,并且在ArchLinux是运行在proot这个虚拟环境下,关于系统的调用都会有转换成本,所以编译过程会较为缓慢。
安装步骤
- 从源码编译Redis,官方支持ARM64架构:
# 下载和编译Redis
wget https://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
启动和使用
可能会遇到的问题
- 在ARM64架构下启动Redis时可能遇到内核bug警告:
WARNING Your kernel has a bug that could lead to data corruption during background save.
Redis will now exit to prevent data corruption.
解决方案:
# 方法1:命令行忽略警告
./src/redis-server --ignore-warnings ARM64-COW-BUG
# 方法2:在配置文件中添加
# ignore-warnings ARM64-COW-BUG
# 方法3:创建启动脚本
echo '#!/bin/bash' > start_redis.sh
echo './src/redis-server --ignore-warnings ARM64-COW-BUG' >> start_redis.sh
chmod +x start_redis.sh
./start_redis.sh
启动方式
由于proot环境限制,需要手动启动Redis,这里会根据当前系统情况来启动redis,比如由于ARM64架构,所以需要添加--ignore-warnings ARM64-COW-BUG来忽略警告。这里只是解释基本的启动方式,后续会根据基本的启动方式来创建一个控制脚本,方便后续使用。可以看文章里【终极Redis控制脚本】中的脚本内容,根据情况修改脚本,来启动redis。
- 启动
# 1. 进入redis-stable安装目录
cd /root/redis-stable
# 方式1:这里没有指定redis配置文件启动,就会使用redis默认的配置文件启动(这个默认的配置文件不是安装目录下的配置文件), 直接启动(含ARM64修复),由于ARM64架构,所以需要添加`--ignore-warnings ARM64-COW-BUG`来忽略警告。
./src/redis-server --ignore-warnings ARM64-COW-BUG
# 方式2:使用配置文件启动并且后台启动
nohup ./src/redis-server --ignore-warnings ARM64-COW-BUG > redis.log 2>&1 &
- 测试连接
# 1. 进入redis-stable安装目录
cd /root/redis-stable
# 2. 启动客户端
./src/redis-cli
# 测试连接,结果返回PONG,则表示连接成功
./src/redis-cli ping
配置redis
- 配置可以远程访问redis:进入redis.conf,找到protected-mode修改为将yes修改为no,这样就可以通过工具远程访问redis了。
- 配置密码:进入redis.conf,找到requirepass,添加密码
requirepass 123456
- 重启redis,使配置生效
# 1. 进入redis-stable安装目录
cd /root/redis-stable
# 2. 重启redis
./src/redis-server redis.conf
终极Redis控制脚本(推荐)
为了方便在任意位置管理Redis,已创建专用控制脚本 redis-control.sh。
脚本
脚本功能特点
- ✅ 后台启动:自动在后台运行Redis
- ✅ ARM64修复:自动包含
--ignore-warnings ARM64-COW-BUG - ✅ 状态管理:完整的启动、停止、重启功能
- ✅ 状态检查:检查运行状态和连接测试
- ✅ 日志管理:集中的日志文件管理
- ✅ 进程管理:PID文件管理,防止重复启动
- ✅ 全局使用:使用绝对路径,可在任意位置运行
使用方法
# 启动Redis(后台运行)
./redis-control.sh start
# 停止Redis
./redis-control.sh stop
# 重启Redis
./redis-control.sh restart
# 查看状态
./redis-control.sh status
# 查看日志
./redis-control.sh logs
# 显示帮助
./redis-control.sh help
脚本内容
#!/bin/bash
# Redis控制脚本
# 适用于Termux+ArchLinux+proot环境
# 使用绝对路径,可在任意目录下运行
### 文件位置
#- **Redis安装目录**: `/root/redis-stable`
#- **日志文件**: `/tmp/redis.log`
#- **PID文件**: `/tmp/redis.pid`
REDIS_DIR="/root/redis-stable"
REDIS_SERVER="$REDIS_DIR/src/redis-server"
REDIS_CLI="$REDIS_DIR/src/redis-cli"
REDIS_CONF="$REDIS_DIR/redis.conf"
PID_FILE="/tmp/redis.pid"
LOG_FILE="/tmp/redis.log"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查Redis是否已安装
check_redis() {
if [ ! -f "$REDIS_SERVER" ]; then
echo -e "${RED}错误: Redis服务器未找到在 $REDIS_SERVER${NC}"
echo "请确保Redis已正确编译安装"
exit 1
fi
}
# 启动Redis
start_redis() {
check_redis
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo -e "${YELLOW}Redis已经在运行中 (PID: $PID)${NC}"
return 1
else
echo "清理无效的PID文件..."
rm -f "$PID_FILE"
fi
fi
echo -e "${GREEN}启动Redis服务器...${NC}"
# 后台启动Redis,包含ARM64修复
nohup "$REDIS_SERVER" \
--ignore-warnings ARM64-COW-BUG \
--daemonize no \
--pidfile "$PID_FILE" \
> "$LOG_FILE" 2>&1 &
# 获取进程ID
REDIS_PID=$!
echo "$REDIS_PID" > "$PID_FILE"
# 等待启动
sleep 2
if ps -p "$REDIS_PID" > /dev/null 2>&1; then
echo -e "${GREEN}✓ Redis启动成功! PID: $REDIS_PID${NC}"
echo "日志文件: $LOG_FILE"
echo "PID文件: $PID_FILE"
else
echo -e "${RED}✗ Redis启动失败${NC}"
echo "查看日志: tail -f $LOG_FILE"
return 1
fi
}
# 停止Redis
stop_redis() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo -e "${YELLOW}停止Redis服务器 (PID: $PID)...${NC}"
# 尝试优雅关闭
if [ -f "$REDIS_CLI" ]; then
"$REDIS_CLI" shutdown 2>/dev/null
sleep 2
fi
# 如果还在运行,强制终止
if ps -p "$PID" > /dev/null 2>&1; then
kill "$PID"
sleep 2
# 最后的强制终止
if ps -p "$PID" > /dev/null 2>&1; then
kill -9 "$PID"
fi
fi
rm -f "$PID_FILE"
echo -e "${GREEN}✓ Redis已停止${NC}"
else
echo -e "${YELLOW}Redis未运行,清理PID文件${NC}"
rm -f "$PID_FILE"
fi
else
echo -e "${YELLOW}Redis未运行 (未找到PID文件)${NC}"
fi
}
# 检查Redis状态
status_redis() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo -e "${GREEN}✓ Redis正在运行 (PID: $PID)${NC}"
# 尝试ping测试
if [ -f "$REDIS_CLI" ]; then
PING_RESULT=$("$REDIS_CLI" ping 2>/dev/null)
if [ "$PING_RESULT" = "PONG" ]; then
echo -e "${GREEN}✓ Redis连接正常${NC}"
else
echo -e "${YELLOW}⚠ Redis进程存在但无法连接${NC}"
fi
fi
return 0
else
echo -e "${RED}✗ Redis未运行 (PID文件存在但进程不存在)${NC}"
rm -f "$PID_FILE"
return 1
fi
else
echo -e "${RED}✗ Redis未运行${NC}"
return 1
fi
}
# 重启Redis
restart_redis() {
echo -e "${YELLOW}重启Redis...${NC}"
stop_redis
sleep 1
start_redis
}
# 查看日志
logs_redis() {
if [ -f "$LOG_FILE" ]; then
echo -e "${GREEN}Redis日志内容:${NC}"
tail -f "$LOG_FILE"
else
echo -e "${YELLOW}日志文件不存在: $LOG_FILE${NC}"
fi
}
# 显示帮助信息
show_help() {
echo "Redis控制脚本 - Termux+ArchLinux版本"
echo ""
echo "用法: $0 {start|stop|restart|status|logs|help}"
echo ""
echo "命令说明:"
echo " start - 启动Redis服务器"
echo " stop - 停止Redis服务器"
echo " restart - 重启Redis服务器"
echo " status - 检查Redis运行状态"
echo " logs - 查看Redis日志"
echo " help - 显示此帮助信息"
echo ""
echo "文件位置:"
echo " Redis目录: $REDIS_DIR"
echo " 日志文件: $LOG_FILE"
echo " PID文件: $PID_FILE"
}
# 主程序逻辑
case "$1" in
start)
start_redis
;;
stop)
stop_redis
;;
restart)
restart_redis
;;
status)
status_redis
;;
logs)
logs_redis
;;
help|--help|-h)
show_help
;;
*)
echo -e "${RED}无效的命令: $1${NC}"
echo ""
show_help
exit 1
;;
esac
创建系统链接, 方便在系统任意位置使用脚本
脚本设置
# 1. 赋予执行权限
chmod +x redis-control.sh
# 2. 创建系统链接(可选)
sudo ln -s 脚本所在目录/redis-control.sh /usr/local/bin/redis
# 3. 或添加到PATH
export PATH="$PATH:/path/to/script/directory"

浙公网安备 33010602011771号