Centos7中将redis服务写入systemctl
CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,比起原来的service和config两套命令,systemd整合了service和config的功能。Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。先安装一下redis,我这里是redis-6.2.3版本,不多说命令如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 下载安装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配置文件中一样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $ 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。
发现redis.service启动启来了,但碰到一个问题,systemctl start redis.service执行之后就阻塞在那里,后台服务配置相关肯定有问题。在redis的配置文件中可以看到有两项配置daemonize和supervised,配置文件中说,如果以systemd启动daemonize配置将不会有什么影响(但我测试发现并不是这样)。应该同时修改daemonize yes和修改supervised配置。建议使用auto或者systemd。这两项配置修改掉任何一项发现systemctl start redis.service都会被阻塞运行:
1 2 3 4 5 6 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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2020-06-19 Memcache 查看列出所有key方法