python3安装redis

#!/usr/bin/python3import os
import platform
import argparse
import shutil# 自定义变量
default_system = "ubuntu"
default_redis_version = "6.2.6"
default_install_path = "/usr/local/redis"
default_local_package_dir = os.path.dirname(os.path.abspath(__file__))def stop_firewall():if platform.system() == "Linux":os.system("systemctl stop firewalld")def disable_selinux(system):if system == "centos":os.system("setenforce 0")def install_redis_dependencies(system):if system == "ubuntu":os.system("apt-get -y update")os.system("apt-get install -y build-essential tcl wget")elif system == "centos":os.system("yum -y  update")os.system("yum install -y build-essential tcl wget")else:print(f"Unsupported system: {system}")    def download_redis(version, package_path):if not os.path.exists(os.path.join(package_path, f"redis-{version}.tar.gz")):os.system(f"wget http://download.redis.io/releases/redis-{version}.tar.gz -P {package_path}")def extract_redis(version):os.system(f"tar xvf redis-{version}.tar.gz")def compile_and_install_redis(package_path,version,install_path):os.chdir(f"redis-{version}")os.system(f"make PREFIX={install_path} install")shutil.copy(os.path.join(package_path, f"redis-{version}","redis.conf"),os.path.join(install_path, "redis.conf"))def create_redis_service_file(install_path):redis_service_content = f"""[Unit]
Description=Redis In-Memory Data Store
After=network.target[Service]
Type=forking
ExecStart={install_path}/bin/redis-server {install_path}/redis.conf
ExecStop={install_path}/bin/redis-cli shutdown
Restart=always[Install]
WantedBy=multi-user.target
"""with open("/etc/systemd/system/redis.service", "w") as service_file:service_file.write(redis_service_content)os.system("sudo systemctl daemon-reload")def set_redis_autostart(system):if system == "ubuntu":os.system(f"sudo systemctl enable redis")elif system == "centos":os.system(f"sudo chkconfig redis on")os.system(f"sudo systemctl enable redis")else:print(f"Unsupported system: {system}")
def modify_redis_config(install_path):config_file_path = os.path.join(install_path, "redis.conf")with open(config_file_path, "r") as config_file:config_lines = config_file.readlines()updated_config_lines = []for line in config_lines:if line.startswith("bind"):updated_config_lines.append("bind 0.0.0.0\n")  # Change bind option to bind 0.0.0.0else:updated_config_lines.append(line)with open(config_file_path, "w") as config_file:config_file.writelines(updated_config_lines)def print_installation_info(redis_version, install_path):print("Redis installation completed successfully!")print("Installation details:")print(f"- Redis version: {redis_version}")print(f"- Install path: {install_path}")print(f"- Redis configuration file: {os.path.join(install_path, 'redis.conf')}")print(f"- Redis start command: redis-server")print("Remember to start Redis using the above command.")def main():parser = argparse.ArgumentParser(description="Compile and install Redis with custom options")parser.add_argument("-s", "--system", choices=["ubuntu", "centos"], default=default_system, help="Choose the system (ubuntu or centos)")parser.add_argument("-v", "--version", help="Specify Redis version")parser.add_argument("-p", "--path", help="Specify install path")parser.add_argument("-l", "--local-package", help="Specify local package path")args = parser.parse_args()system = args.system if args.system else default_systemredis_version = args.version if args.version else default_redis_versioninstall_path = args.path if args.path else default_install_pathlocal_package_path = args.local_package if args.local_package else default_local_package_dirstop_firewall()disable_selinux(system)install_redis_dependencies(system)download_redis(redis_version, local_package_path)extract_redis(redis_version)compile_and_install_redis(local_package_path,redis_version,install_path)create_redis_service_file(install_path)set_redis_autostart(system)modify_redis_config(install_path)print_installation_info(redis_version, install_path)if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eve-ng镜像模拟设备-信息安全管理与评估-2023国赛

eve-ng镜像模拟设备-信息安全管理与评估-2023国赛 author:leadlife data:2023/12/4 mains:EVE-ng 模拟器 - 信息安全管理与评估模拟环境部署 references: EVE-ng 官网:https://www.eve-ng.net/EVE-ng 中文网&#xff1…

嵌入版python作为便携计算器(安装及配置ipython)

今天用别的电脑调试C,需要计算反三角函数时发现没有趁手工具,忽然想用python作为便携计算器放在U盘,遂想到嵌入版python 懒得自己配可以直接下载,使用方法见第4节 1,下载embeddable python(嵌入版python&…

React中传入props.children后, 为什么会导致组件的重新渲染?

传入props.children后, 为什么会导致组件的重新渲染? 问题描述 在 react 中, 我想要对组件的渲染进行优化, 遇到了一个非常意思的问题, 当我向一个组件中传入了 props.children 之后, 每次父组件重新渲染都会导致这个组件的重新渲染; 它看起来的表现就像是被memo包…

【1day】​万户协同办公平台 convertFile 任意文件读取漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

图的邻接链表储存

喷了一节课 。。。。。。。、。 #include<stdio.h> #include<stdlib.h> #define MAXNUM 20 //每一个顶点的节点结构&#xff08;单链表&#xff09; typedef struct ANode{ int adjvex;//顶点指向的位置 struct ArcNode *next;//指向下一个顶点 …

C++ 内存分区模型

目录 程序运行前 代码区 全局区 程序运行后 new 在堆区开辟数据 delete释放堆区数据 堆区开辟数组 内存分区模型 栈&#xff08;Stack&#xff09; 堆&#xff08;Heap&#xff09; 全局/静态存储区&#xff08;Global/Static Storage&#xff09; 常量存储区&am…

力扣230. 二叉搜索树中第K小的元素

深度优先搜索 思路&#xff1a; 二叉搜索树的特性&#xff0c;通过中序遍历得到有序序列&#xff0c;则遍历到第K个节点的时候即为结果&#xff1b;使用栈通过深度优先遍历进行中序遍历&#xff1a; 先将节点和左子节点压栈&#xff1b;然后栈顶上就是“最左”叶子节点&#x…

Linux DAC权限的简单应用

Linux的DAC&#xff08;Discretionary Access Control&#xff09;权限模型是一种常见的访问控制机制&#xff0c;它用于管理文件和目录的访问权限。作为一名经验丰富的Linux系统安全工程师&#xff0c;我会尽可能以简单明了的方式向计算机小白介绍Linux DAC权限模型。 在Linu…

jenkins中“Jenkins Plot Plugin”的使用方法,比较两个excel的数据差异

Jenkins Plot Plugin是Jenkins的一个插件&#xff0c;它可以用于生成图表和报表&#xff0c;以便更好地理解和分析构建和测试数据。下面是使用Jenkins Plot Plugin比较两个Excel数据差异的步骤&#xff1a; 1.安装Jenkins Plot Plugin&#xff1a;在Jenkins的插件管理页面搜索…

使用 Axios 进行网络请求的全面指南

使用 Axios 进行网络请求的全面指南 本文将向您介绍如何使用 Axios 进行网络请求。通过分步指南和示例代码&#xff0c;您将学习如何使用 Axios 库在前端应用程序中发送 GET、POST、PUT 和 DELETE 请求&#xff0c;并处理响应数据和错误。 准备工作 在开始之前&#xff0c;请…

电子学会C/C++编程等级考试2021年09月(五级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:抓牛 农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式: 1、从X移动到X-1或X+1,每次移动花费一分钟 2、从X移动到2*X,每…

ubuntu18.04安装opencv-4.5.5+opencv_contrib-4.5.5

一、安装opencv依赖 sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-d…

Navicat 技术指引 | 适用于 GaussDB 分布式的自动运行功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

「Python编程基础」第7章:字符串操作

文章目录 一、回顾二、新手容易踩坑的引号三、转义字符四、多行字符串写法五、注释六、字符串索引和切片七、字符串的in 和 not in八、字符串拼接九、转换大小写十、合并字符串join()十一、分割字符串split()十二、字符串替换 replace()十三、字符串内容判断方法十四、字符串内…

读文章摘录

20%的时间可以做点业余项目。有个叫克莱舍基的人&#xff0c;写了一本书&#xff0c;书名叫《认知盈余-网络时代的创造与繁荣》&#xff0c;他有个观点&#xff0c;闲暇时间给人机会创造有价值的东西。 很重要的一点是选合适的人&#xff0c;把他们引入团队。何谓合适的人&…

uniapp 开发app项目步骤

Uniapp 是一个基于 Vue.js 的跨平台开发框架&#xff0c;可以将同一个项目同时编译到多个平台&#xff0c;包括 H5、iOS、Android 等。以下是开发 Uniapp 项目的步骤&#xff1a; 安装 Uniapp 可以通过 npm 安装 Uniapp&#xff0c;具体操作如下&#xff1a; npm install -g…

Qt使用Cryptopp生成HMAC-MD5

近期项目中HTTPS通讯中&#xff0c;token需要使用HMAC-MD5算法生成&#xff0c;往上找了一些资料后&#xff0c;仍不能满足自身需求&#xff0c;故次一记。 前期准备&#xff1a; ①下载Cryptopp库&#xff08;我下载的是8.8.0 Release版本&#xff09;&#xff1a;Crypto Li…

Linux: glibc: net/if.h vs linux/if.h

最近看到一段代码改动,用net/if.h替换了linux/if.h。仔细看了看这两个的区别: https://stackoverflow.com/questions/20082433/what-is-the-difference-between-linux-if-h-and-net-if-h 从网上搜了一下看到如下的一个编译错误,如果同时使用这两个if.h文件,需要将net/if.h…

注意力机制添加方法

要将注意力机制模块添加到YoloV5工程项目中的yolo.py中&#xff0c;可参考以下四种情况。 以下4个elif代码来自https://yolov5.blog.csdn.net/article/details/129108082 elif m in [SimAM, ECA, SpatialGroupEnhance,TripletAttention]:args [*args[:]]elif m in [CoordAtt…

【1day】致远系统A6版本operaFileActionController.jsp接口任意文件读取漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现