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就会开机自启。