爬虫案例之服务器宝塔面板计划任务备份与恢复

文章目录

前言

使用阿里云服务器也有一段时间了,续费几次之后再续费就变的非常贵了,我们需要重新换服务器时,可能会需要把宝塔面板的计划任务也得重新再来一遍,虽然有插件不过需要付费,像我这样的白嫖党让我付费是不可能滴,但是手动一个一个实在太慢了,尤其对于那些计划任务较多的人来说,浪费时间不说还痛苦😣。。。

下面的爬虫程序可以将未过期的服务器的计划任务保存下来,并自动添加到新的服务器中。
在这里插入图片描述
我的是将远程服务器计划任务备份到本地服务器(windows Linux 子系统ubuntu)中,之后买新的服务器可以将本地备份到远程实现计划任务的备份与恢复

说明

  • 首先打开你的服务器的计划任务界面(一切一切的前提是你的服务器已经安装了宝塔面板),如http://39.106.6.19:8888/crontab ,右键检查找到network,找到如下图请求链接,(点击headers,我这里为了让大家看到计划任务的json格式并没有打开headers),在上面找参数,将代码里面的headers1中填写找到的参数
    在这里插入图片描述

  • headers1是源服务器,headers2是目标服务器

代码

import requests


headers1 = {
'Cookie':'pro_end=-1; ltd_end=-1; serverType=nginx; order=1839; bt_userC%22data%22%3A%7B%22username%22%3A%22155****1063%22%7D%7D; csrftoken=qmXjPjWQ2XoUC1TEkZhq8P8uSYKDrZ9lNMd6Vw9vgYmzI39oc3rZd2V3lEb7UNRp; sites_path=/www/wwwroot; distribution=crch=undefined; softType=-1; load_type=-1; rank=list; vcodesum=11; Path=/python; SESSIONID=6dfa8e80-8531-4d58-a4dd-fb20b361f7a2.iHDuK5NGDsMEj3Y43_uOMNHM-W8; request_token=0hiUL3VESBhbMXm5bE9MmewZJiCGeiHHXAb8RvGt5pAma0tV',
'Host':'39.106.56.4:8888',
'Origin':'http://39.106.56.4:8888',
'Pragma':'no-cache',
'Referer':'http://39.106.56.4:8888/crontab',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
'x-cookie-token':'0hiUL3VESBE9MmewZJiCGeiHHXAb8RvGt5pAma0tV',
'x-http-token':'H9F6oXNti3LR3iQCtRy9WMOjpOQcyIDc1qvRf7TcvK',
'X-Requested-With':'XMLHttpRequest'
}
headers2 = {
    'Cookie':'csrftoken=S2Nkx7rAODwac1jWCs02NritjLhjb6ZAZtKFt4ZMVkkMe; SESSIONID=f8fb934f7c-b650-a8f3d7ef6075.CiO28-HdcAdUADJhB_MSbAyTA6s; request_token=ZM8SgVEDfSTrZk9GveGzKhFkVBS9uAYEKqicM4VEL944kQ7G; pro_end=-1; ltd_end=-1; serverType=nginx; order=id%20desc; memSize=12168; bt_user_info=%7B%22status%22%3Atrue%2C%22msg%22%3A%22%u83B7%u53D6%u6210%u5222data%22%3A%7B%22username%22%3A%22155****1063%22%7D%7D; rank=list; Path=/',
    'Host':'127.0.0.1:9999',
    'Origin':'http://127.0.0.1:9999',
    'Pragma':'no-cache',
    'Referer':'http://127.0.0.1:9999/crontab',
    'sec-ch-ua':'"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
    'sec-ch-ua-mobile':'?0',
    'Sec-Fetch-Dest':'empty',
    'Sec-Fetch-Mode':'cors',
    'Sec-Fetch-Site':'same-origin',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    'x-cookie-token':'ZM8SgVk9GveGzKhFkVBS9uAYEKqicM4VEL944kQ7G',
    'x-http-token':'R5vjDeW8RxYs5r6UPzC3zNvkFAyQxvOR9goIqPzTrU',
    'X-Requested-With':'XMLHttpRequest'
}
# 初始化源服务器和待备份的目标服务器
def init(server1,server2):
    global url_server1
    global url_server2
    global getID
    getID = True
    url_server1 = {"url":f"http://{server1}/crontab?action=GetCrontab","add":f"http://{server1}/crontab?action=AddCrontab","del":f"http://{server1}/crontab?action=DelCrontab","stop":f"http://{server1}/crontab?action=set_cron_status","headers":headers1}
    url_server2 = {"url":f"http://{server2}/crontab?action=GetCrontab","add":f"http://{server2}/crontab?action=AddCrontab","del":f"http://{server2}/crontab?action=DelCrontab","stop":f"http://{server2}/crontab?action=set_cron_status","headers":headers2}
def convert(s):
    if "每月" in s:
        return "months"
    elif "每周" in s:
        return "week"
    elif "每" in s and "天" in s:
        if len(s)>2:
            return "day-n"
        return "day"
    elif "每" in s and "小时" in s:
        if "每小时" in s:
            return "hour"
        return "hour-n"
    elif "每" in s and "分钟" in s:
        return "minute-n"
    else:
        return ""
# 增加计划任务
def add_crontab():
    #     使用网站请求的计划任务
    
    r = requests.post(url_server1.get("url"),headers = url_server1.get("headers")).text
    global cons
    cons = eval(r)

#     使用本地存储的计划任务
#     f = open('crontab.txt','r',encoding='utf-8')
#     r = str(f.readlines())
#     global cons
#     cons = eval(eval(r)[0])
    for con in cons[::-1]:
        data = {
            'name':con['name'],
            'type':convert(con['type']),
            'where1':con['where1'],
            'hour':con['where_hour'],
            'minute':con['where_minute'],
            'week':con['where1'],
            'sType':con['sType'],
            'sBody':con['sBody'],
            'sName':con['sName'],
            'backupTo':con['backupTo'],
            'save':con['save'],
            'sBody':con['sBody'],
            'status':con['status'],
            'urladdress':con['urladdress'],
            'save_local':con['save_local'],
            'notice':con['notice'],
            'notice_channel':con['notice_channel']
         }
#         print(data)
        
        r = requests.post(url_server2.get("add"),headers=url_server2.get("headers"),data=data)
        print(r.text)
        id = r.json()['id']
        if con.get("status") == 0:
            data2 = {"id":id}
            print(data2)
            r1 = requests.post(url_server2.get("stop"),headers=url_server2.get("headers"),data=data2)
            print(r1.text)
        id = id+1
        print("*"*30)
def whichserver(server):
    if server in url_server1.get("url"):
        headers = url_server1.get("headers")
    else:
        headers = url_server2.get("headers")
    return headers
# 删除server服务器的id从J到K的计划任务
def del_crontab(j,k,server):
    if server in url_server1.get("del"):
        url = url_server1.get("del")
    else:
        url = url_server2.get("del")
    headers = whichserver(server)
    for i in range(j,k+1):
        r = requests.post(url,headers=headers,data={"id":i})
        print(r.text)
# 保存server服务器的计划任务
def save_crontab(server):
    if server in url_server1.get("url"):
        url = url_server1.get("url")
    else:
        url = url_server2.get("url")
    headers = whichserver(server)
    r = requests.post(url,headers = headers).text
    cons = eval(r)
    f = open('crontab.txt','w',encoding='utf-8')
    f.write(str(cons))
    f.close()
    print("保存成功,请到当前目录crontab.txt查看")
def display(server):
    if server in url_server1.get("url"):
        url = url_server1.get("url")
    else:
        url = url_server2.get("url")
    headers = whichserver(server)
    r = requests.post(url,headers = headers)
    for i in r.json():
        print(i)
if __name__ == '__main__':
#     初始化源服务器地址和目的服务器地址
    init("39.106.56.4:8888","127.0.0.1:9999")
#     展示计划任务,可获取ID
#     display("127.0.0.1:9999")
# 开始备份计划任务
    add_crontab()
#     删除服务器ID从i 到 j的计划任务
#     del_crontab(1,500,"127.0.0.1:9999")
#     display("127.0.0.1:9999")



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值