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.pswp.cn/news/208733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208733.shtml
英文地址,請注明出處:http://en.pswp.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接口任意文件讀取漏洞學習

注:該文章來自作者日常學習筆記,請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與作者無關。 目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現