当前位置: 首页 > news >正文

幻兽帕鲁服务器自动重启备份-python

幻兽帕鲁服务器自动重启备份-python

  • 1. 前置知识点
  • 2. 目录结构
  • 3. 代码内容
  • 4. 原理解释
  • 5. 额外备注

基于python编写的服务器全自动管理工具,能够实现自动定时备份存档,以及在检测到服务器崩溃之后自动重新启动,并且整合了对于frp端口转发工具的自动重启。

我受够这个服务器没完没了的崩溃了,别再整天艾特我开服了

如果对你的部署很有用,欢迎评论和点赞~

1. 前置知识点

幻兽帕鲁开服教程——游戏
架设游戏私服——内网穿透工具frp

需要掌握基本python编程知识,知道怎么部署python环境与修改配置路径。

2. 目录结构

|-pal_server_manage.bat
|-pal_server_manage.py

3. 代码内容

pal_server_manage.bat
这就是一个单纯方便双击启动运行的脚本。

python D:\servers\pal_server_manage.py

pal_server_manage.py
包含了初始化启动、自动备份与自动重启的功能。

import os
import time
import zipfile
import socket
import threading
import psutil
import subprocess# 参数配置
class Config:# 服务器路径server_path = r"D:\servers\steamcmd\steamapps\common\PalServer\PalServer.exe"# 计算服务器应用程序名字server_name = os.path.split(server_path)[-1]# frp路径frp_path = r"D:\servers\frp\client\frpc.exe"frp_config = r"D:\servers\frp\client\frpc.ini"frp_name = os.path.split(frp_path)[-1]# 记录正在运行的服务器server = Nonefrp = None# 是否使用自动重启use_auto_restart = True# 检测服务器是否在运行的间隔(秒)check_server_run_step = 10# 是否启动自动备份use_auto_backup = True# 备份的路径save_dir_path = r"D:\servers\steamcmd\steamapps\common\PalServer\Pal\Saved"# 备份的时间间隔(秒)save_time_step = 900# 备份的存档路径output_zip_path = r"D:\servers\save_backups\pal_save_backups"os.makedirs(os.path.split(output_zip_path)[-1], exist_ok=True)# 将1个文件夹打包压缩为zip文件
def zip_file(src_dir, zip_path):z = zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED)count = 0for dirpath, _, filenames in os.walk(src_dir):fpath = dirpath.replace(src_dir, '')fpath = fpath and fpath + os.sep or ''length = len(filenames)for filename in filenames:z.write(os.path.join(dirpath, filename), os.path.split(src_dir)[1] + fpath + filename)count += 1print(f'\rzip file: {count}/{length}', end='')print(f'\nzip {src_dir} success!')z.close()# 检测程序是否在运行
def is_program_running(program_name):# 扫描所有的进程idfor pid in psutil.pids():try:# 如果进程名与服务器名一致,代表服务器正在运行if psutil.Process(pid).name() == program_name:return Trueexcept (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):pass# 扫描所有进程后,未找到服务器return False# 获取当前可视化时间信息
def get_local_time():local = time.localtime(time.time())now = f"{local[0]:04d}_{local[1]:02d}_{local[2]:02d}_{local[3]:02d}_{local[4]:02d}_{local[5]:02d}"return now# 自动备份线程
class auto_server_backup(threading.Thread):def __init__(self, threadID, name):threading.Thread.__init__(self)self.threadID = threadIDself.name = namedef run(self):while True:# 压缩存档文件夹到备份路径now = get_local_time()zip_path = os.path.join(Config.output_zip_path, now + ".zip")zip_file(Config.save_dir_path, zip_path)print(f"{now}: zip file from {Config.save_dir_path} to {zip_path}")# 休眠等待time.sleep(Config.save_time_step)# 自动重启线程
class auto_server_restart(threading.Thread):def __init__(self, threadID, name):threading.Thread.__init__(self)self.threadID = threadIDself.name = namedef run(self):while True:# 如果frp没有启动,就启动它if not is_program_running(Config.frp_name):now = get_local_time()Config.frp = subprocess.Popen(["start", Config.frp_path, "-c", Config.frp_config])print(f"{now}: Restart frp {Config.frp_path}")# 如果服务器没有启动,就启动它if not is_program_running(Config.server_name):now = get_local_time()Config.server = subprocess.Popen([Config.server_path])print(f"{now}: Restart Server {Config.server_path}")# 休眠等待time.sleep(Config.check_server_run_step)def main():# 检查服务器是否启动# 如果frp没有启动,就启动它if not is_program_running(Config.frp_name):Config.frp = subprocess.Popen([Config.frp_path, "-c", Config.frp_config])print(f"Start frp {Config.frp_path}")# 如果服务器没有启动,就启动它if not is_program_running(Config.server_name):Config.server = subprocess.Popen([Config.server_path])print(f"Start Server {Config.server_path}")# 自动保存线程if Config.use_auto_backup:thread_backup = auto_server_backup(1, "backup")thread_backup.start()# 自动重启线程if Config.use_auto_restart:thread_restart = auto_server_restart(2, "restart")thread_restart.start()# 在子线程结束前不要终止,也就是无限堵塞if Config.use_auto_backup:thread_backup.join()if Config.use_auto_restart:thread_restart.join()if __name__ == "__main__":main()

4. 原理解释

自动备份:定时压缩服务器存档文件夹到备份路径,非常简单粗暴。
注:因为没有在服务器内部运行保存命令,有极小概率可能出现玩家与世界存档不同步的问题,但是因为发生概率太低而且只要加快保存频率就不是什么大问题(其实是懒得整那么麻烦的东西),所以选择性无视了此问题。

自动保存:定时扫描所有进程,检测服务器是否在运行,发现没有在运行,就重新启动~

5. 额外备注

如果你希望主动定时关闭服务器重启,可以用该代码主动关闭服务器:

Config.server.kill()

祝大家玩得开心呀~上班当帕鲁已经够苦了,下班后都开心点吧!
在这里插入图片描述

相关文章:

幻兽帕鲁服务器自动重启备份-python

幻兽帕鲁服务器自动重启备份-python 1. 前置知识点2. 目录结构3. 代码内容4. 原理解释5. 额外备注 基于python编写的服务器全自动管理工具,能够实现自动定时备份存档,以及在检测到服务器崩溃之后自动重新启动,并且整合了对于frp端口转发工具的…...

C# Onnx yolov8 水表读数检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 水表读数检测 效果 模型信息 Model Properties ------------------------- date:2024-01-31T10:18:10.141465 author:Ultralytics task:detect license:AGPL-…...

负载均衡下webshell连接

目录 一、什么是负载均衡 分类 负载均衡算法 分类介绍 分类 均衡技术 主要应用 安装docker-compose 2.1上传的文件丢失 2.2 命令执行时的漂移 2.3 大工具投放失败 2.4 内网穿透工具失效 3.一些解决方案 总结 一、什么是负载均衡 负载均衡(Load Balanc…...

Spring面试大全-基础知识01

1.什么是Spring Spring框架是用于构建企业级Java的开源框架,他通过依赖注入和IOC容器帮我我们管理对象;支持AOP,将非业务功能(日志,事务等)从我们业务代码中分离出来,提高了代码的可维护性&…...

Transformer实战-系列教程4:Vision Transformer 源码解读2

🚩🚩🚩Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 4、Embbeding类 self.embeddings Embeddings(config, img_sizeimg_size) class Embeddings(nn.…...

cesium-水平测距

cesium测量两点间的距离 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><el-breadcrumb-item&…...

【Android-Compose】手势检测实现按下、单击、双击、长按事件,以及避免频繁单击事件的简单方法

目录&#xff1a; 1 不需要双击事件 规避频繁单击事件2 需要双击事件&#xff08;常规写法&#xff09;3 后记&#xff1a;不建议使用上面的代码自定义按钮 1 不需要双击事件 规避频繁单击事件 var firstClickTime by remember { mutableStateOf(System.currentTimeMillis()…...

AUTOSAR汽车电子嵌入式编程精讲300篇-基于神经网络的CAN总线负载率优化(续)

目录 3.3 SA 算法 3.3.1 SA 算法原理 3.3.2 基于 SA 算法 CAN 总线负载率优化分析...

python爬虫6—高性能异步爬虫

如果有多个URL等待我们爬取&#xff0c;我们通常是一次只能爬取一个&#xff0c;爬取效率低&#xff0c;异步爬虫可以提高爬取效率&#xff0c;可以一次多多个URL同时同时发起请求 异步爬虫方式&#xff1a; 一、多线程、多进程&#xff08;不建议&#xff09;&#xff1a;可以…...

日历功能——C语言

实现日历功能&#xff0c;输入年份月份&#xff0c;输出日历 #include<stdio.h>int leap_year(int year) {if(year % 4 0 && year % 100 ! 0 || year % 400 0){return 1;}else{return 0;} }int determine_year_month_day(int *day,int month,int year) {if(mo…...

GPIO中断

1.EXTI简介 EXTI是External Interrupt的缩写&#xff0c;指外部中断。在嵌入式系统中&#xff0c;外部中断是一种用于处理外部事件的机制。当外部事件发生时&#xff08;比如按下按钮、传感器信号变化等&#xff09;&#xff0c;外部中断可以立即打断正在执行的程序&#xff0…...

springboot完成一个线上图片存放地址+实现前后端上传图片+回显

1.路径 注意路径 2.代码&#xff1a;&#xff08;那个imagePath没什么用&#xff0c;懒的删了&#xff09;&#xff0c;注意你的本地文件夹要有图片&#xff0c;才可以在线上地址中打开查看 package com.xxx.common.config;import org.springframework.beans.factory.annotat…...

编程思维与生活琐事的内在关联及其应用价值

随着科技的日益普及和信息化时代的到来&#xff0c;编程作为一种现代技能&#xff0c;其影响已不再局限于专业领域&#xff0c;而是逐步渗透到人们的日常生活之中。探讨编程与生活琐事之间的关系&#xff0c;有助于我们更好地理解如何将技术智慧应用于日常管理&#xff0c;提升…...

OSPF排错

目录 实验拓扑图 实验要求 实验排错 故障一 故障现象 故障分析 故障解决 故障二 故障现象 故障分析 故障解决 故障三 故障现象 故障分析 故障解决 故障四 故障现象 故障分析 故障解决 故障五 故障现象 故障分析 故障解决 故障六 故障现象 故障分析 …...

day07-CSS高级

01-定位 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 1.定位模式&#xff1a;position 2.边偏移&#xff1a;设置盒子的位置 left right top bottom 相对定位 position: relative 特点&#xff1a; 不脱标&#xff0c;占用自己原来位置 显示模…...

05 MP之ActiveRecord模式+SimpleQuery

1. ActiveRecord ActiveRecord(活动记录&#xff0c;简称AR)&#xff0c;是一种领域模型模式&#xff0c;特点是一个模型类对应关系型数据库中的一个表&#xff0c;而模型类的一个实例对应表中的一行记录。 其目标是通过围绕一个数据对象, 进行全部的CRUD操作。 1.1 让实体类…...

git diff查看比对两次不同时间点提交的异同

git diff查看比对两次不同时间点提交的异同 用 git diff命令&#xff1a; git diff commit-id-1 commit-id-2 不同commit-id在不同的时间点提交产生&#xff0c;因为也可以认为git diff是比对两个不同时间点的代码异同。 git diff比较不同commit版本的代码文件异同_git diff c…...

基于muduo网络库开发服务器程序和CMake构建项目 笔记

跟着施磊老师做C项目&#xff0c;施磊老师_腾讯课堂 (qq.com) 一、基于muduo网络库开发服务器程序 组合TcpServer对象创建EventLoop事件循环对象的指针明确TcpServer构造函数需要什么参数,输出ChatServer的构造函数在当前服务器类的构造函数当中,注册处理连接的回调函数和处理…...

前端支持下载模板、导入数据、导出数据(excel格式)

前言 xlsx是由SheetJS开发的一个处理excel文件的npm库,适用于前端开发者实现下载模板、导入导出excel文件等需求&#xff0c;演示的项目的技术栈为vue3 elementPlus 一. 引入xlsx 安装xlsx npm install xlsx引入xlsx import * as XLSX from xlsx;二. 下载模板 const han…...

编译Faiss-gpu【InterMKL】C++ 按步骤操作 基本不会有问题的 python原理相同。

编译Faiss-gpu C++ 基本介绍 使用Faiss版本【1.7.4】 该项目依赖于BLAS 组件 OpenBLAS 和 IntelMKL BLAS 【官方支持】 IntelMKL 会比 OpenBLAS 快的多。 【来自官方结论】 本机环境 Cuda :11.1 Cuda-Driver: 515 InterMKL: 2021.2.0 Faiss :1.7.4 注意:faiss仅…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

【Ftrace 专栏】Ftrace 参考博文

ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...