initd风格
#!/bin/sh
### BEGIN INIT INFO
# Provides: redis
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop Redis server
### END INIT INFO
REDIS_HOME="/app/redis-5.0.4"
REDIS_SERVER="${REDIS_HOME}/src/redis-server"
REDIS_CONF="${REDIS_HOME}/redis.conf"
start() {
echo "Starting Redis server..."
$REDIS_SERVER $REDIS_CONF > /dev/null 2>&1 &
echo "Redis server started."
}
stop() {
echo "Stopping Redis server..."
# 获取Redis进程ID并停止
REDIS_PID=$(ps -ef | grep redis-server | grep -v grep | awk '{print $2}')
if [ -n "$REDIS_PID" ]; then
kill -9 $REDIS_PID
echo "Redis server stopped."
else
echo "Redis server is not running."
fi
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
systemd风格
[Unit]
Description=Redis Server
After=network.target
[Service]
Type=forking
PIDFile=/var/run/redis.pid
ExecStart=/app/redis-5.0.4/src/redis-server /app/redis-5.0.4/redis.conf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -9 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
将上述内容保存为`/etc/systemd/system/redis.service`文件后,你可以使用以下命令来管理Redis服务:
- 启动服务:`systemctl start redis`
- 停止服务:`systemctl stop redis`
- 重启服务:`systemctl restart redis`
- 设置开机自启:`systemctl enable redis`
请注意:
- 确保`/app/redis-5.0.4/src/redis-server`和`/app/redis-5.0.4/redis.conf`的路径与你的实际Redis安装路径一致。
- `PIDFile`指定了Redis进程ID文件的位置,这有助于systemd跟踪服务进程。如果Redis在启动时生成的PID文件路径与这里不一致,需要进行相应修改。
- `ExecReload`用于重新加载服务配置,这里简单地发送`HUP`信号给主进程,不过并非所有服务都支持这种简单的重新加载方式,具体取决于服务本身的特性。在实际应用中,可能需要根据Redis的具体情况进行调整。
- `ExecStop`使用`kill -9`强制停止进程,这可能不是最优雅的停止方式,在实际情况中,如果Redis提供了更合适的停止脚本或命令,建议替换此处的停止方式,以确保数据的完整性和一致性,避免数据丢失或损坏等问题。