CentOS8设置Redis开机自启

前提:

通常我们安装软件包,大多用yum指令安装。
安装完成后,我们只需要systemctl enable 就能将软件设定为开机自启动。
但如果你是通过压缩包下载安装的,又那该如何设定开机自启呢。
本文将以Redis为例,讲述如何设定Redis开机自启。

操作:

1 下载redis软件包

wget https://download.redis.io/releases/redis-6.2.6.tar.gz  #下载

tar xvzf redis-6.2.6.tar.gz   #解压

cd redis-6.2.6  #进入Redis

make  #编译

#到此就可以使用Redis数据库了。

cd src  $进入src目录

./redis-server #开启redis

2 创建redis.service配置文件

#如果你yum install其他服务,并用systemctl enable 指令设定过开机自启,那么你应该有注意到过这么一句话。
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.

#我们创建的redis.service文件就要放在/usr/lib/systemd/system/目录下

cd /usr/lib/systemd/system/  #进入该目录

touch redis.service  #创建文件

3 文件内写入以下内容,保存退出。

[Unit]
Description=redis-server
After=network.target
 
[Service]
Type=forking
ExecStart=/root/redis-6.2.6/src/redis-server /root/redis-6.2.6/redis.conf
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
#配置文件讲解,以下所有并非必要,只需了解部分即可
#对于有些配置的解释,作者也是云里雾里,想深入了解的小伙伴,请官网

[Unit]          #区块,启动顺序与依赖关系
Description=    #当前服务的简单描述
Documentation=  #文档位置
After=          #在该程序后启动当前服务,两者不具备依赖关系
Before=         #在该程序前启动当前服务,两者不具备依赖关系
Wants=          #表示当前服务与该程序存在弱依赖关系,若该程序无法启用,不影响当前服务运行
Requires=       #表示当前服务与该程序存在强依赖关系,若该程序无法启用,则影响当前服务运行
Conflicts=      #如果该程序运行,则当前服务无法运行
AllowIsolate=   #允许使用systemctl isolate命令切换到multi-user.target


[Service]       #区块,启动行为
EnvironmentFile=    #指定当前服务的环境参数
ExecStart=      #定义启动进程时执行的命令
ExecReload=     #重启服务时执行的命令
ExecStop=       #停止服务时执行的命令
ExecStartPre=   #启动服务之前执行的命令
ExecStartPost=  #启动服务之后执行的命令
ExecStopPost=   #停止服务之后执行的命令

#Type字段定义启动类型。
Type=simple     #默认值,ExecStart字段启动的进程为主进程
Type=forking    #ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
Type=oneshot    #类似于simple,但只执行一次,systemd 会等它执行完,才启动其他服务
Type=dbus       #类似于simple,但会等待 D-Bus 信号后启动
Type=notify     #类似于simple,启动结束后会发出通知信号,然后 systemd 再启动其他服务
Type=idle       #类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合

RemainAfterExit=yes  #表示进程退出以后,服务仍然保持执行,一旦使用systemctl stop命令停止服务,ExecStop指定的命令就会执行。

#KillMode定义systemd如何停止服务。
KillMode=control-group  #默认值,当前控制组里面的所有子进程,都会被杀掉
KillMode=process        #只杀主进程
KillMode=mixed          #主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
KillMode=none           #没有进程会被杀掉,只是执行服务的 stop 命令。

#Restart定义了退出后的重启方式。
Restart=no              #默认值,退出后不会重启
Restart=on-success      #只有正常退出时(退出状态码为0),才会重启
Restart=on-failure      #非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
Restart=on-abnormal     #只有被信号终止和超时,才会重启
Restart=on-abort        #只有在收到没有捕捉到的信号终止时,才会重启
Restart=on-watchdog     #超时退出,才会重启
Restart=always          #不管是什么退出原因,总是重启
#对于守护进程,推荐设为on-failure
#对于那些允许发生错误退出的服务,可以设为on-abnormal。

RestartSec              #表示重启服务之前,需要等待的秒数。

 
[Install]        #区块,定义如何安装这个配置文件,即怎样做到开机启动
#WantedBy表示该服务所在的 Target。
WantedBy=multi-user.target  #当前服务所在的 Target 是multi-user.target

#一般来说,常用的 Target 有两个。
#一个是multi-user.target,表示多用户命令行状态。
#另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target。

4 定义开机重启

systemctl enable redis.service

#有种可能,在执行上述代码后,光标便会一直闪烁,似乎是在执行某种操作。
#之所以如此,是因为redis没有后台执行所造成的
#解决办法,修改redis.conf文件
daemonize yes  #原属性是no,将其改为yes保存即可。

5 重启测试,如无意外,redis就会开机自启。