在Ubuntu 16.04 LTS minimal上安装Redis-Server。

我有一个问题,希望有人能帮助我。我拥有一个基于OpenVZ的vServer(我讨厌内核限制),无法安装Redis。
我该怎么做:
1. 清洁安装Ubuntu 16.04 LTS minimal版本 2. 以root身份登录 3. 运行:apt update 4. 运行:apt upgrade (我不知道这是否相关,但在过程中出现了以下内容:
安装新版本的配置文件/etc/systemd/system.conf... addgroup: 组“systemd-journal”已经存在作为系统组。退出。 [/usr/lib/tmpfiles.d/var.conf:14] 路径“/var/log”的重复行,忽略。 验证路径/var/run/sshd失败:符号链接级别太多。 验证路径/var/run/sudo失败:符号链接级别太多。 验证路径/var/run/sudo/ts失败:符号链接级别太多。 (正在读取数据库...当前已安装16369个文件和目录。)
5. 运行:apt install redis-server 问题出现了:
安装redis-server(2:3.0.6-1)... fchownat() of /run/redis failed: Invalid argument insserv: 警告:脚本损坏或无效:/etc/init.d/../rc2.d/S15ssh_gen_host_keys redis-server.service的作业失败,因为超时。有关详细信息,请参见“systemctl status redis-server.service”和“journalctl -xe”。 invoke-rc.d: initscript redis-server, action "start" failed. ... 进程:11845 ExecStopPost=/bin/run-parts --verbose /etc/redis/redis-server.p ost-down.d (code=exited, status=0/SUCCESS) 进程:11839 ExecStartPost=/bin/run-parts --verbose /etc/redis/redis-server. post-up.d (code=exited, status=0/SUCCESS) 进程:11837 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exi ted, status=0/SUCCESS) 进程:11833 ExecStartPre=/bin/run-parts --verbose /etc/redis/redis-server.p re-up.d (code=exited, status=0/SUCCESS) systemd[1]: 启动高级键值对存储失败。 systemd[1]: redis-server.service:单元已进入... systemd[1]: redis-server.service:失败,返回... 提示:某些行被省略了,使用-l以显示完整内容。 dpkg:处理软件包redis-server(--configure)时出错: 子进程安装后脚本返回错误退出状态1 正在处理触发器libc-bin(2.23-0ubuntu10)... 正在处理触发器systemd(229-4ubuntu21.9)... 正在处理触发器ureadahead(0.100.0-19)... 处理过程中遇到错误: redis-server E:子进程/usr/bin/dpkg返回错误代码(1) W:操作在完成之前被中断
运行:systemctl status redis-server.service redis-server.service - 高级键值存储 已加载: 已加载 (/lib/systemd/system/redis-server.service; 已启用; 厂商预设: 已启用) 活动状态: 正在激活 (启动后) 自 Mon 2018-11-19 19:41:53 CET; 54秒前 文档: http://redis.io/documentation, man:redis-server(1) 进程: 11966 ExecStopPost=/bin/run-parts --verbose /etc/redis/redis-server.post-down.d (code=已退出, 状态=0/成功
进程: 11978 ExecStartPost=/bin/run-parts --verbose /etc/redis/redis-server.post-up.d (code=已退出, 状态=0/成功
进程: 11976 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=已退出, 状态=0/成功) 进程: 11972 ExecStartPre=/bin/run-parts --verbose /etc/redis/redis-server.pre-up.d (code=已退出, 状态=0/成功 控制组: /system.slice/redis-server.service └─11977 /usr/bin/redis-server 127.0.0.1:6379

systemd[1]: 正在启动高级键值存储...

run-parts[11972]: run-parts: 正在执行 /etc/redis/redis-server.pre-up.d/00_example

run-parts[11978]: run-parts: 正在执行 /etc/redis/redis-server.post-up.d/00_example

systemd[1]: redis-server.service: PID 文件 /var/run/redis/redis-server.pid 不可读 (

之后我无法启动Redis服务器(因为超时而失败)。我该怎么解决这个问题?我在这个论坛上看到了很多关于Redis的帖子,但是那些解决方案对我没有帮助。对不起,我的英文不好。提前谢谢。


欢迎!运行命令 ls -lah /var/run/redis/redis-server.pidls -lah /var/run/redis/,然后在此处显示两者的返回结果。 - slava
无法访问'/var/run/redis/redis-server.pid':没有该文件或目录 - Firehead
共计 0 | drwxrwsr-x 2 root root 40 . | rrwxr-xr-x 13 root root 440 .. - Firehead
尝试使用 root 用户运行 chmod -R 777 /var/run/redis/,然后再次运行 Redis 服务器。 - slava
现在 -rw-r--r-- 1 redis root 6 Nov 19 20:07 /var/run/redis/redis-server.pid - Firehead
总共4个。好的。drwxrwsrwx 2 root root 60 .。drwxr-xr-x 13 root root 440 ..。-rw-r--r-- 1 redis root 6 redis-server.pid。 - Firehead
我看到redis-server.pid已经创建了。Redis还是不工作吗? - slava
仍然无法工作 :( - Firehead
嗯,当我在第一次运行 apt update && apt upgrade 命令之前安装 Redis 时,它可以正常工作。因此,在升级过程中出了些问题。 - Firehead
当我在安装Redis之后进行升级时,Redis仍然在工作。但是当我发送reboot命令时,服务器不再重新启动,我不得不重新安装镜像。 - Firehead
嗨@Firehead!我们的Ubuntu 16.04服务器在2018-11-20 04:00 CET自动更新了,SSH停止工作了。这可能与你的问题有些关联,因为我们在该服务器上运行了两个Redis实例。你是如何重新连接到服务器的?你的日志文件中是否有与systemd-tmpfiles相关的错误? - ominug
1个回答

修复错误的方法:以非root用户身份安装Redis。
sudo apt-get update
sudo apt-get install build-essential tcl

下载并提取源代码

cd /tmp

现在,下载最新稳定版本的Redis。这个版本始终可以在一个稳定的下载链接上找到。
curl -O http://download.redis.io/redis-stable.tar.gz

解压缩tar包的方法是输入以下命令:
tar xzvf redis-stable.tar.gz

进入刚刚解压的Redis源代码目录结构。
cd redis-stable

构建和安装Redis

编译依赖项:

cd deps
sudo make hiredis jemalloc linenoise lua geohash-int
cd ..

编译Redis二进制文件的方法是输入以下命令:
make

编译完成后,运行测试套件以确保一切都正确构建。您可以通过输入以下命令来执行此操作:
make test

这通常需要几分钟才能运行。一旦完成,您可以通过输入以下命令将二进制文件安装到系统中:
sudo make install

首先创建Redis用户和组。可以通过输入以下单个命令来完成:

sudo adduser --system --group --no-create-home redis

现在,我们可以通过输入以下命令来创建/var/lib/redis目录:
sudo mkdir /var/lib/redis

我们应该将redis用户和组赋予对该目录的所有权:
sudo chown redis:redis /var/lib/redis

调整权限,使普通用户无法访问此位置。
sudo chmod 770 /var/lib/redis

启动Redis

通过输入以下命令来启动systemd服务:

sudo systemctl start redis

检查服务是否没有错误,运行以下命令:
sudo systemctl status redis

源代码:https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04

make[1]: 进入目录 '/tmp/redis-stable/src' CC Makefile.dep CC adlist.o 在文件 adlist.c 中包含: zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录 编译终止。 Makefile:232: 目标“adlist.o”失败 make[1]: *** [adlist.o] 错误 1 make[1]: 离开目录 '/tmp/redis-stable/src' Makefile:6: 目标“all”失败 make: *** [all] 错误 2 - Firehead
尝试运行以下命令:cd deps sudo make hiredis jemalloc linenoise lua geohash-int cd .. sudo make install 分别执行。 - slava
谢谢,我之后会试一下,服务器拒绝连接,不知道为什么 :D - Firehead
那个也没起作用 -- 进行测试:[异常]:执行测试客户端时:无法打开套接字:没有可用的缓冲区空间。 无法打开套接字:没有可用的缓冲区空间... - Firehead
尝试在命令行中运行 redis-cli 以检查安装情况。Redis套接字可以单独设置(这是与Redis设置相关的另一个问题。例如:https://guides.wp-bullet.com/how-to-configure-redis-to-use-unix-socket-speed-boost/)。 - slava
无法连接到 Redis 在 127.0.0.1:6379 的服务器:连接被拒绝。 - Firehead