CentOS下redis自启动shell脚本

下面是详细讲解 "CentOS下redis自启动shell脚本" 的完整攻略:

1. 编写redis自启动脚本

在 CentOS 系统下,使用 systemd 来管理系统服务。因此,我们可以编写一个 systemd 的 service 脚本来实现 redis 的自启动。

编辑服务脚本:

sudo nano /etc/systemd/system/redis.service

填入下面的内容:

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

在这个脚本中,我们定义了一个名为 "redis" 的 service。其中:

  • Description:服务的描述信息;
  • After:指定在哪些服务之后启动,在这里我们指定了 network.target,即系统自带的网络服务后启动;
  • User / Group:指定运行该服务的用户和用户组,为了安全起见,我们要创建一个新的用户和用户组,并将其授权给 /usr/local/redis 目录,这样该用户才能成功启动 redis-server;
  • ExecStart:指定服务启动时要执行的命令,即启动 redis-server;
  • ExecStop:指定停止服务时执行的命令,即执行 redis-cli shutdown,这样能够优雅地关闭 redis 服务;
  • Restart:服务意外停止时,自动重启服务;
  • WantedBy:指定运行级别,在这里指定为 "multi-user.target",意味着在系统启动时运行该服务。

保存文件并退出。

2. 启动服务

为了让新创建的 systemd service 生效,我们需要使用以下命令重新加载 systemd 系统:

sudo systemctl daemon-reload

启动 redis 服务:

sudo systemctl start redis.service

检查服务状态:

sudo systemctl status redis.service

输出应如下:

● redis.service - Redis In-Memory Data Store
   Loaded: loaded (/etc/systemd/system/redis.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-06-26 17:37:02 UTC; 9s ago
 Main PID: 12345 (redis-server)
    Tasks: 4 (limit: 2357)
   Memory: 4.6M
   CGroup: /system.slice/redis.service
           ├─12345 /usr/local/bin/redis-server *:6379
           ├─12347 /usr/local/bin/redis-server *:6379
           ├─12348 /usr/local/bin/redis-server *:6379
           └─12349 /usr/local/bin/redis-server *:6379

我们可以看到 redis 服务已经启动并运行。

3. 设置自启动

为了使 redis 服务在系统启动时自动启动,我们使用以下命令:

sudo systemctl enable redis.service

现在,当我们重启系统时,redis 服务会自动启动。

示例1:运行多个redis实例

如果需要在同一台服务器上运行多个 redis 实例,需要修改服务脚本中的一些设定。

以下是一个简单的示例:

编写配置文件

首先,我们需要复制一份默认的 Redis 配置文件 /etc/redis/redis.conf:

sudo cp /etc/redis/redis.conf /etc/redis/redis_6381.conf
sudo cp /etc/redis/redis.conf /etc/redis/redis_6382.conf

接着,我们需要修改这两份配置文件。在第一份配置文件中搜索"6379"并全部替换为"6381",在第二份配置文件中搜索"6379"并全部替换为"6382"。

新建自启动服务脚本

sudo nano /etc/systemd/system/redis_6381.service

编辑服务脚本:

[Unit]
Description=Redis 6381
After=network.target

[Service]
PIDFile=/var/run/redis_6381.pid
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis_6381.conf
ExecStop=/usr/local/bin/redis-cli -p 6381 shutdown
Restart=always

[Install]
WantedBy=multi-user.target

其中:

  • Description:服务的描述信息;
  • After:指定在哪些服务之后启动,在这里我们指定了 network.target,即系统自带的网络服务后启动;
  • PIDFile:指定 Redis 进程 ID 文件路径,虽然不是必须的,但是我们为了管理方便,指定该参数可以帮助我们监控 Redis 实例的启动和停止;
  • User / Group:指定运行该服务的用户和用户组;
  • ExecStart:指定服务启动时要执行的命令,即启动 redis-server;
  • ExecStop:指定停止服务时执行的命令,即执行 redis-cli shutdown;
  • Restart:服务意外停止时,自动重启服务;
  • WantedBy:指定运行级别,在这里指定为 "multi-user.target"。

保存文件并退出。

同理,可以创建 redis_6382.service。

启动服务及设置自启动

sudo systemctl daemon-reload
sudo systemctl start redis_6381.service
sudo systemctl start redis_6382.service
sudo systemctl status redis_6381.service
sudo systemctl status redis_6382.service
sudo systemctl enable redis_6381.service
sudo systemctl enable redis_6382.service

示例2:设置redis的持久化

Redis 默认情况下不会持久化任何数据。如果重启服务器,Redis 将丢失所有数据,这可能是不能接受的。以下是如何设置 Redis 持久化的示例。

在 /etc/redis/redis.conf 文件中找到以下两行:

save 900 1
save 300 10

将前缀 "save" 更改为 "snapshot":

#save 900 1
#save 300 10
snapshot 900 1
snapshot 300 10

在同一文件中搜索 "appendonly no" 并将其更改为 "appendonly yes":

# appendonly no
appendonly yes

在同一文件中搜索 "dir" 并确认其值为 /var/lib/redis:

dir /var/lib/redis

保存文件并退出。

结论

经过以上步骤,Redis 服务将会在每次系统启动时自动启动,并在 Redis 容器意外停止时自动重新启动。附带的两个示例可以轻松地启动多个 Redis 实例和设置 Redis 持久化。 在访问 Redis 时,请注意防火墙规则。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CentOS下redis自启动shell脚本 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • mysql 时间转换函数的使用方法

    MySQL提供了多种时间转换函数,这些函数可以方便地将时间数据在不同格式之间进行转换。下面将逐一介绍这些函数的使用方法。 1. DATE_FORMAT() DATE_FORMAT() 函数用于将日期/时间格式化为指定的字符串格式。其语法如下: DATE_FORMAT(date,format) 其中,date 参数为日期/时间的值,format 参数为指定的格…

    database 2023年5月22日
    00
  • mysql 日期和时间格式转换实现语句

    转换mysql日期和时间格式通常使用DATE_FORMAT和STR_TO_DATE两个函数。下面介绍这两个函数的使用方法和实现语句,以及两个使用示例。 1. DATE_FORMAT函数 DATE_FORMAT函数可以将日期或时间转换成指定的格式,其语法为: DATE_FORMAT(date, format) 其中,date表示需要转换的日期或时间,forma…

    database 2023年5月22日
    00
  • Oracle Session每日统计功能实现

    关于Oracle Session每日统计功能的实现,以下是一份完整攻略: 1. 需求分析 在实现Oracle Session每日统计功能之前,我们首先需要了解需求。具体而言,我们需要知道以下信息: 需要统计哪些信息:也就是说,我们需要知道需要统计哪些Session相关信息,例如Session数量、创建时间、使用时间、用户、终端等等。 统计时间范围:我们需要知…

    database 2023年5月21日
    00
  • redis分布式锁的实现

    一.正常加锁 当两个用户同时注册一个用户名时,为保证用户名不能重复,因此对其注册的用户名加锁。 具体步骤: 获得用户注册的用户名,进行判断,如果为空则对其进行加锁,保存到数据库,释放锁资源。   二.线程出现阻塞 当A线程加锁后出现阻塞时,导致数据还没有存到数据库,锁的时间便会失效。 B线程便会执行,对数据进行加锁,成功后保存到数据库,而这时A线程启动,将数…

    Redis 2023年4月10日
    00
  • 关于mysql varchar类型的长度

    char 定长  最多255字符  末尾的空格会被默认删除 何时选用char类型储存? 1 数据长度近似 如手机号 身份证 MD5加密后的值 2 短字符串 相对varchar可以节约一个储存长度的空间 3 频繁更新的字段  相对于varchar不会产生长度变化也就不会产生存储碎片   varchar varchar类型与char类型不同 为变长字符串 在字符…

    MySQL 2023年4月13日
    00
  • 详解SQL四种语言:DDL DML DCL TCL

    详解SQL四种语言:DDL、DML、DCL、TCL SQL(Structured Query Language)是关系型数据库管理系统的标准语言。SQL语言包括DDL、DML、DCL、TCL四种语言。下面将详细介绍这四种语言的含义、语法和示例。 DDL DDL(Data Definition Language,数据定义语言)是用于定义数据库对象的语言,主要包…

    database 2023年5月22日
    00
  • 大数据相关常见面试题与答案整理

    大数据相关常见面试题与答案整理 1. 常见面试题 1.1 关于Hadoop的问题 Q1: Hadoop的优点是什么? A:Hadoop有三个主要的优点: 高可靠性:Hadoop通过将数据复制到不同的节点来实现高可靠性,并可以自动恢复失败的任务。 高扩展性:Hadoop可以很容易地扩展以适应数据规模的增加。只需要添加更多的节点即可。 高效性:Hadoop的高效…

    database 2023年5月19日
    00
  • Linux99问(上)

    下面我就来详细讲解一下“Linux99问(上)”的完整攻略。 1. 确定攻略对象 在开始攻略之前,我们需要确认攻略的对象是哪些问题。在 “Linux99问(上)” 中,一共包含了99个问题,我们可以按照相关主题对这些问题进行分类。例如: 基本命令类问题:如“如何查看当前目录下的文件?”,“如何复制文件?”等等。 文件和目录管理类问题:如“如何创建文件夹?”,…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部