IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis开机自启失败(systemd服务) -> 正文阅读

[大数据]Redis开机自启失败(systemd服务)

在CentOS 8机器上安装Redis之后,把它做成systemd服务的形式,实现开机自启。
Redis配置文件/etc/redis/redis.conf其中两个参数如下:

daemonize yes
supervised no

systemd的配置文件/etc/systemd/system/redis.service全文如下:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
PrivateTmp=true
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

配置完毕,直接在shell终端执行systemctl start redis进行测试服务,是能成功启动的。
接着
执行命令重新加载:systemctl daemon-reload
设置为开机自启:systemctl enable redis

开机之后查看Redis服务状态,却是失败:

[root@localhost ~]# systemctl status redis
● redis.service - redis-server
   Loaded: loaded (/etc/systemd/system/redis.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2021-10-14 08:36:17 EDT; 1min 9s ago
  Process: 1253 ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
 Main PID: 1267 (code=exited, status=1/FAILURE)

Oct 14 08:36:17 localhost.localdomain systemd[1]: Starting redis-server...
Oct 14 08:36:17 localhost.localdomain systemd[1]: Started redis-server.
Oct 14 08:36:17 localhost.localdomain systemd[1]: redis.service: Main process exited, code=exited, status=1/FAILURE
Oct 14 08:36:17 localhost.localdomain systemd[1]: redis.service: Failed with result 'exit-code'.

查看/var/log/messages日志,水平有限看不出明显的异常提示:

Oct 14 08:36:17 localhost systemd[1]: Started redis-server.
Oct 14 08:36:17 localhost systemd[1]: Started OpenSSH server daemon.
Oct 14 08:36:17 localhost NetworkManager[1243]: <info>  [1634214977.2267] settings: Loaded settings plugin: ifcfg-rh ("/usr/lib64/NetworkManager/1.20.0-3.el8/libnm-settings-plugin-ifcfg-rh.so")
Oct 14 08:36:17 localhost NetworkManager[1243]: <info>  [1634214977.2271] settings: Loaded settings plugin: keyfile (internal)
Oct 14 08:36:17 localhost systemd[1]: Starting Network Manager Script Dispatcher Service...
Oct 14 08:36:17 localhost systemd[1]: Started CUPS Scheduler.
Oct 14 08:36:17 localhost NetworkManager[1243]: <info>  [1634214977.2318] device (lo): carrier: link connected
Oct 14 08:36:17 localhost NetworkManager[1243]: <info>  [1634214977.2324] manager: (lo): new Generic device (/org/freedesktop/NetworkManager/Devices/1)
Oct 14 08:36:17 localhost NetworkManager[1243]: <info>  [1634214977.2348] manager: (ens33): new Ethernet device (/org/freedesktop/NetworkManager/Devices/2)
Oct 14 08:36:17 localhost systemd[1]: redis.service: Main process exited, code=exited, status=1/FAILURE
Oct 14 08:36:17 localhost systemd[1]: redis.service: Failed with result 'exit-code'.

尝试了百度多种解决方案,比如修改daemonize yes为no、supervised no为systemd,或者Type=simple、Type=notify等等,都无法解决,日志会出现其他的错误。

最后是增加了两行配置
After=network-online.target
Wants=network-online.target
才得以解决。修改后的systemd配置文件如下:

[root@localhost ~]# cat /etc/systemd/system/redis.service 
[Unit]
Description=redis-server
After=network.target
After=network-online.target    #增加
Wants=network-online.target    #增加

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
PrivateTmp=true
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

要注意填写正确,如果某个字母漏了或者打错,是会失败的。

来自<systemd.special 中文手册>解释其含义:
network-online.target
对于那些严格要求 必须存在真实可用的网络连接的单元, 应该在其单元文件中包含 Wants=network-online.target 与 After=network-online.target 指令。 此目标单元意在包含 一个能够将执行流程一直阻塞到网络变为真实可用为止的服务单元。 具体的实现方法取决于网络管理服务所实际使用的网络管理工具。

注意,network-online.target 是一个主动单元(被功能使用者包含而不是被功能提供者包含), 它包含的服务单元可以将执行流程一直阻塞到网络变为真实可用为止。 相反,network.target 是一个被动单元(被功能提供者包含而不是被功能使用者包含), 它不会导致执行流程出现明显的阻塞。 一般来说, network.target 是系统启动流程中的一部分, 而 network-online.target 则不是(除非确有某些单元依赖于它)。 详情参见 Running Services After the Network is up 文档。

所有用于挂载远程网络文件系统的 mount 单元都自动包含 Wants=network-online.target 与 After=network-online.target 指令。 注意,仅向网络上其他主机提供服务的守护进程 通常并不依赖于此单元。

Wants=network-online.target 与 After=network-online.target 将被自动添加到所有引用了 “$network” 的SysV初始化脚本单元中。

注意,此单元仅用于系统启动期间。 系统启动完成之后, 此单元将不再跟踪系统的网络状态。 因此,不能将此单元用作网络连接监视器。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:51:47  更:2021-10-15 11:53:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:04:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码