• 【centos】【Redis】【systemd】Redis进程守护


    Centos7中将redis服务写入systemctl
    CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,比起原来的service和config两套命令,systemd整合了service和config的功能。Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。先安装一下redis,我这里是redis-6.2.3版本,不多说命令如下:

    下载安装redis.

    $ cd /usr/local/redis
    $ wget https://download.redis.io/releases/redis-6.2.3.tar.gz
    $ tar xzf redis-6.2.3.tar.gz
    $ cd redis-6.2.3
    $ make

    安装完成之后添加快捷方式进/usr/bin中以方便后期使用redis-cli

    $ cd /usr/local/redis
    $ mkdir etc
    $ cp redis-6.2.3/redis.conf etc/
    $ ln -s /usr/local/redis/redis-6.2.3/src/redis-server /usr/bin/redis-server
    $ ln -s /usr/local/redis/redis-6.2.3/src/redis-cli /usr/bin/redis-cli
    这时redis就可以通过 redis-server /usr/local/redis/etc/redis.conf启动了。然后我们开始将其写入systemd中。进入/usr/lib/systemd/system/目录中,创建redis.service文件,.service文件定义一个服务,分为[Unit],[Service],[Install]三个部分,需要更改的就基本只有ExecStart这一行,即是你本机的redis启动命令。另外PIDFile保持和redis配置文件中一样。
    $ cd /usr/lib/systemd/system/
    $ vim redis.service

    [Unit]
    Description=Redis #描述内容
    #在哪些服务启动之后启动
    After=syslog.target network.target remote-fs.target nss-lookup.target
     
    [Service]
    Type=forking
    #PIDFile和redis.conf配置中一致
    PIDFile=/var/run/redis_6379.pid
    ExecStart=/usr/local/redis/redis-6.2.3/src/redis-server /usr/local/redis/etc/redis.conf
    #重新加载和停止服务的命令
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
     
    #系统以默认多用户方式启动时,此服务自动运行。
    [Install]
    #Alias:服务别名
    WantedBy=multi-user.target
      保存好之后开始操作systemctl,首先要执行 systemctl daemon-reload 命令,重载systemd配置以引入redis.service。然后使用命令将redis.service加进开机启动:systemctl enable redis.service。完成之后我们就可以启动redis服务。systemctl start redis.service。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    发现redis.service启动启来了,但碰到一个问题,systemctl start redis.service执行之后就阻塞在那里,后台服务配置相关肯定有问题。在redis的配置文件中可以看到有两项配置daemonize和supervised,配置文件中说,如果以systemd启动daemonize配置将不会有什么影响(但我测试发现并不是这样)。应该同时修改daemonize yes和修改supervised配置。建议使用auto或者systemd。这两项配置修改掉任何一项发现systemctl start redis.service都会被阻塞运行:
    
    • 1

    7

    When Redis is supervised by upstart or systemd, this parameter has no impact.

    daemonize yes
    #If you run Redis from upstart or systemd, Redis can interact with your

    supervision tree. Options:

    #supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
    #supervised auto - detect upstart or systemd method based on UPSTART_JOB or NOTIFY_SOCKET environment variables
    supervised auto
    systemctl其它命令:
    查看服务是否设置开机启动: systemctl is-enabled redis.service
    查看服务是否启动: systemctl is-active redis.service
    禁止服务开机启动: systemctl disable redis.service
    列出已经启动的unit: systemctl list-units (也可直接:systemctl)

  • 相关阅读:
    Pow(x, n)
    Android嵌套事务
    基于 selenium 实现网站图片采集
    数据结构笔记——查找
    如何在 Ubuntu 上安装 EMQX MQTT 服务器
    小红书运营:商家如何选择小红书博主?选择小红书博主需要注意什么?
    阿里发布AI编码助手:通义灵码,兼容 VS Code、IDEA等主流编程工具
    ubuntu20.04禁止自动休眠的几种方式
    武汉新时标文化传媒有限公司解读抖音平台的算法与推荐机制
    算法的时间复杂度和空间复杂度
  • 原文地址:https://blog.csdn.net/qq_39057568/article/details/130292298