服务器操作系统一直使用的是 ubuntu server,因为安装软件很方便,直接apt-get install
就行。但使用 apt 安装 redis 版本比较旧,也没有新的源,所有只能自己编译安装了。不过有个问题,自己编译安装的启动和重启比较麻烦(启动:/usr/bin/redis-server /etc/redis/redis.conf,停止:/usr/bin/redis-cli shutdown)。我在想能不能使用类似 ubuntu service xxx restart
的指令。
搜索了一下发现可以使用upstart
来实现这个需求,但是这个在 ubuntu 15.04 已经废弃了,推荐使用更先进的systemd
。在 /etc/systemd/system/ 下创建一个 redis.service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis Type=forking ExecStart=/usr/bin/redis-server /etc/redis/redis.conf ExecStop=/usr/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target |
其中主要是定义了启动用户,启动命令,停止命令。有个设置比较重要Type=forking
,可以理解为 systemd 是一个类似 supervise 的守护进程,forking 表示服务管理器是系统 init 的子进程,用于管理需要后台运行的服务。同时还需要修改 redis 的配置:
1 2 3 | daemonize yes …… supervised systemd |
然后就可以使用sudo systemctl start redis
命令启动 redis 了。同时支持 stop、restart 等常用指令。启动成功后运行 sudo systemctl status redis
查看运行状态:
可以看见 redis 已经正常运行了。可以尝试使用 kill -9 命令把 redis 杀死,你会发现 redis 马上又会被拉起,这样能保证服务能一直运行(当然若是服务有问题一直蹦,谁也救不了你)。若需要开机启动还可以运行sudo systemctl enable redis
命令加入到开启启动项里面。
我们平常自己写的程序也可以依样画葫芦写个配置文件,使用 systemctl 来做服务管理,这种方式更加先进,还有一些其它实用的功能。
参考资料:
Ubuntu systemd service file for Redis, https://gist.github.com/geschke/ab6afa91b2d9dfcd5c25
systemd - ArchWiki, https://wiki.archlinux.org/title/Systemd
How To Install and Configure Redis on Ubuntu 16.04 | DigitalOcean, https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04