django搭建一个小型的服务器运维网站-重启服务器的进程

news/2024/4/28 14:22:55/文章来源:https://blog.csdn.net/weixin_34117522/article/details/88828213

目录

  1. 项目介绍和源码;
  2. 拿来即用的bootstrap模板;
  3. 服务器SSH服务配置与python中paramiko的使用;
  4. 用户登陆与session;
  5. 最简单的实践之修改服务器时间;
  6. 查看和修改服务器配置与数据库的路由;
  7. 基于websocket的实时日志实现;
  8. 查看服务器中的日志与前端的datatable的利用;
  9. 重启服务器的进程。

前言

  相当于前面的文章而言,这篇文章就比较简短了。关于服务器中进程需要经常批量的重启,一般会在服务器中写个shell脚本去统一执行,网页的功能仅仅是用paramiko函数调用服务器中的shell脚本就好,然后把失败和成功的重启记录在前端记录下来。页面如图1所示。

图1 重启进程

功能实现

页面显示

  • 页面html函数

  页面仅仅由一个执行重启操作的模块和记录重启次数的模块构成。当然A在重启时,B进入网站是不能执行重启的,html代码中的{{taskor}}变量中记录的就是后台重启时当下操作人,具体的实现在操作互斥中会说说。

{% extends "./base.html" %}{% block css %}{% endblock %}
{% block title %}{{ title }}{% endblock %}
{% block log %}{{ title }}{% endblock %}
{% block username %}{{ username }}{% endblock %}{% block mainbody %}
<section class="wrapper site-min-height"><div class="fakeloader"></div><h3><i class="fa fa-angle-right"></i> 服务器重启 <i class="fa fa-refresh"></i></h3><div class="row mt"><div class="col-lg-12"><div class="form-panel"><h4 class="mb"> 服务器重启</h4>{% if taskor != '' %}<div class="col-sm-12"><div class="alert alert-danger"  id="loading-tips"><b>稍等~</b> 【{{taskor}}】正在重启进程...</div></div><div><br><br><br><br></div>{% else %}<div class="col-sm-12"><div class="alert alert-danger" id="pre-tips"><b>注意!</b> 此操作将会导致进程重启。</div><div class="alert alert-danger" style="display:none;" id="loading-tips"><b>稍等~</b> 进程正在重启...</div><div class="progress progress-striped active" style="display:none;" id="loading"><div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div></div></div><div><br><br><br><br></div><div class="col-sm-12" style="text-align: right"><button type="button" id="restart" class="btn btn-theme04">重启服务器</button></div><div><br><br><br></div>{% endif %}</div></div></div><div class="row mt"><div class="col-lg-12"><div class="form-panel"><h4 class="mb"> 重启服务器的记录</h4><table class="table table-hover"><thead><tr><th style="width:10%;">重启时间</th><th style="width:10%;">重启人</th><th style="width:10%;">重启是否成功</th></tr></thead><tbody id="tab">{% for item in reboot %}<tr><td>{{ item.reboottime }}</td><td>{{ item.rebooter }}</td><td>{{ item.rebootresult }}</td></tr>{% endfor %}</tbody></table></div></div></div>
</section>
{% endblock %}
  • 页面javascript函数

  页面用到的javascript函数也仅仅是对图1中唯一一个按钮批量重启进程作用(函数中的swal只是一个模态框插件,每当点击按钮时唤起,如图2,关于它的引用文章用户登陆与session提到过),函数通过ajax请求到后端处理。

图2 swal插件

{% block scripts %}
<script>
$(document).ready(function(){$("#restart").click(function(){swal({title: '您确定要重启吗?',type: 'warning',confirmButtonColor: '#DD6B55',confirmButtonText:"是的,我要重启!",  cancelButtonText:"让我再考虑一下…",showLoaderOnConfirm: true, //加载按钮是否可见  showCancelButton: true,preConfirm: function() {  return new Promise(function(resolve) {  setTimeout(function(){$("#restart").hide();$("#pre-tips").hide();$("#loading-tips").show();$("#loading").show();resolve();  }, 3000);  });  },  allowOutsideClick: false, //弹框外是否可点}).then(function(res){if (res){$.ajax({url:"restartserver",type:'GET',success: function(arg){ret = eval(arg);if(ret.status){swal({  type: 'success',  title: '重启完成!',  confirmButtonText: '确定',  confirmButtonColor: '#4cd964'  }).then(function(){window.location.reload();});  }else{swal({  type: 'error',  title: '重启失败!',  confirmButtonText: '确定',  confirmButtonColor: '#4cd964'  }).then(function(){window.location.reload();});  }}});}})});
});
</script>
{% endblock %}
  • 创建model函数

  这里会创建两个model函数,一个在最简单的实践之修改服务器时间中提到过的taskinbackground,它可以将正在进行的事件记录在数据库中,另外一个是记录重启操作的表rebootserver。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import modelsclass taskinbackground(models.Model):taskname = models.CharField(max_length=50)taskor = models.CharField(max_length=100)class Meta:db_table = 'task'app_label = "server"class rebootserver(models.Model):rebooter = models.CharField(max_length=100)reboottime = models.CharField(max_length=200, default="")rebootresult = models.CharField(max_length=200, default="")class Meta:db_table = 'reboot'app_label = "server"
  • 增加url和view函数

  server/urls.py中添加reboot和restartserver,前者用来渲染页面的,后者是用来实现重启的功能。

from django.conf.urls import url
import viewsurlpatterns = [url(r'^reboot', views.rebootserver),url(r'^restartserver', views.restartserver),
]

  server/views.py中添加渲染页面的函数rebootserver,和重启的功能函数restartserver。

# -*- coding: utf-8 -*-
from __future__ import unicode_literalsfrom django.contrib.auth import logout
from django.shortcuts import render_to_response
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
import json
import time# 服务器的名字
htmltitle = '服务器工具'# 渲染页面
@login_required(login_url='/loginpage')
def rebootserver(request):from server import modelsusername = request.session.get('username')# 取出数据库后10条重启的数据reboot = models.rebootserver.objects.all()[::-1][0:10]taskor = ''try:# 后台是否有其他人在重启taskor = models.taskinbackground.objects.get(taskname='reboot').taskorexcept Exception as e:print epagedict = {'reboot': reboot, 'title': htmltitle, 'taskor': taskor, 'username': username}return render_to_response("servermaterial/reboot.html", pagedict)# 重启进程
def restartserver(request):if request.method == 'GET':ret = {'status': False}from WebTool.functions import rebootserverfrom server import modelsusername = request.session.get('username')models.taskinbackground.objects.filter(taskname='reboot').delete()# 将重启进程的任务写进数据库models.taskinbackground.objects.create(taskname='reboot', taskor=username)res = rebootserver()local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())if res == 'Successful Rebooted!':ret['status'] = True# 重启成功记录写入rebootserver中models.rebootserver.objects.create(rebooter=username, reboottime=local_time, rebootresult='重启成功')# 从taskinbackground中删除后台正在执行的重启任务models.taskinbackground.objects.filter(taskname='reboot').delete()return JsonResponse(ret)elif res == 'Unsuccessful Rebooted!':# 重启失败记录写入rebootserver中models.rebootserver.objects.create(rebooter=username, reboottime=local_time, rebootresult='重启失败')# 从taskinbackground中删除后台正在执行的重启任务models.taskinbackground.objects.filter(taskname='reboot').delete()ret['status'] = Falsereturn JsonResponse(ret)else:models.rebootserver.objects.create(rebooter=username, reboottime=local_time, rebootresult='重启失败')models.taskinbackground.objects.filter(taskname='reboot').delete()ret['status'] = Falsereturn JsonResponse(ret)

  看到这里,我们的重启进程的paramiko函数rebootserver写在functions(WebTool/WebTool/functions.py)中,由于自己的Linux没有环境,当时只好写了一个shell脚本模拟进程重启。具体内容请移步至文章服务器SSH服务配置与python中paramiko的使用。

操作互斥

  文章最简单的实践之修改服务器时间提到过,当A修改时间时,其他人没法修改时间,这里用的方法也是同理,将重启进程看成一个后台任务,任务执行时写在model中的taskinbackground中,其他人打开页面时,页面渲染函数会在数据库中查一查有没有对应名字的任务taskor = models.taskinbackground.objects.get(taskname='reboot').taskor
如果有就不提供重启的功能,其效果如图3所示。

图3 其他人在重启进程

{% if taskor != '' %}
<div class="col-sm-12"><div class="alert alert-danger"  id="loading-tips"><b>稍等~</b> 【{{taskor}}】正在重启进程...</div>
</div>
<div><br><br><br><br></div>
{% else %}
<div class="col-sm-12"><div class="alert alert-danger" id="pre-tips"><b>注意!</b> 此操作将会导致进程重启。</div><div class="alert alert-danger" style="display:none;" id="loading-tips"><b>稍等~</b> 进程正在重启...</div><div class="progress progress-striped active" style="display:none;" id="loading"><div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div></div></div><div><br><br><br><br></div><div class="col-sm-12" style="text-align: right"><button type="button" id="restart" class="btn btn-theme04">重启服务器</button></div><div><br><br><br></div>
{% endif %}

  这个互斥的逻辑可以用下面的逻辑图图4描述。通俗点说,其实就相当于用数据库做了一个互斥量,一次只准一个线程执行任务

图4 重启互斥

结语

  这篇文章简单的说了下怎么去用网站调用后台去批量执行进程重启,然后用数据库的表做一个简单的互斥量,防止多个用户同时操作。

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

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

相关文章

Bootstrap手机网站开发案例

Bootstrap手机网站开发案例 一、总结 一句话总结&#xff1a;Bootstrap手机网站开发注意事项&#xff08;3点&#xff09;&#xff1a;a、引入viewpoint声明&#xff0c;b、通过屏幕宽动态控制元素显隐 c、图片添加自适应 1、Bootstrap手机网站开发注意事项&#xff08;3点&…

seo学习_网站用户体验提升的关键点_网站优化技术_百度SEO教程

如果想系统的学习SEO技术的话&#xff0c;那么首先最好搭建一个网站&#xff0c;从关键词的布局、引流和转化率等多个方面明确学习方法&#xff0c;很多新手在刚刚接触SEO行业的时候&#xff0c;可能对于一些专业术语并不了解&#xff0c;由于我国国内并没有专业和系统的SEO课程…

java客服系统_网站常见问题1分钟定位-如何使用ARMS诊断Java服务端报错问题

我的网站为什么一错再错网页报错&#xff0c;尤其是5XX错误是互联网应用最常见的问题之一。5XX错误通常发生于服务端。服务端是业务逻辑最复杂&#xff0c;也是整条网络请求链路中最容易出错、出了错最难排查的地方。运维工程师与研发工程师排查此类问题&#xff0c;通常要通过…

做一个网站需要多少花费?

我是今年清明节&#xff08;4.5&#xff09;之后开始做自己的网站&#xff0c;这周&#xff08;6.20号左右&#xff09;网站正式上线。由于在上班&#xff0c;利用下班时间和周末&#xff0c;陆陆续续做了3个月&#xff0c;勉强做了个能打开&#xff0c;有内容&#xff08;对&a…

关于网站自动链接

转载自谷歌中文网站管理员博客 好网站的特性好的网站通常内容丰富、更新及时。好的网站往往链接其他好网站&#xff0c;同时也吸引更多点击。自然的链接是谷歌页面排名算法决定排名的因素之一&#xff0c;但是&#xff0c;很多网站管理员认为“反向链接越多&#xff0c;网站的排…

lemon oa mysql_CMS4J网站内容管理系统

CMS4J 2010 来了&#xff01; 第 3 代核心&#xff0c;第 4 大版本&#xff01;第 5 年持续研发&#xff01;CMS4J 2010 是专业的 JAVA / JSP 版网站管理系统(JAVA CMS / JSP CMS)&#xff0c;采用CMS4J第3代核心&#xff0c;有着更易于使用的管理界面&#xff0c;同时&#x…

网站架构演化

准备写一系列的博客来介绍和加深理解大型网站技术架构。 说道大型网站&#xff0c;就的先说大型网站的特点&#xff1a;高并发&#xff0c;大流量&#xff0c;高可用&#xff0c;海量数据等。下面就说说大型网站的架构演化过程吧。 1、初始化阶段的网站架构 早期阶段都比较简单…

一个利用ISA2006发布自己做的一个网站报错记录

1.客户在IIS6里面新建网站&#xff0c;在内部浏览到网页正常。2.透过ISA发布后&#xff0c;发现无法打开&#xff0c;报错。3.解决方法&#xff1a;发布规则中&#xff0c;侦听器--身份验证---高级----允许通过HTTP进行客户端身份验证。

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什么…

会员管理系统--网站会员中心,会员接口,自动化处理任务

界面 项目说明 会员中心&#xff0c;这个系统&#xff0c;包含网站中的会员中心&#xff0c;后台的会员管理功能&#xff0c;提供给其他系统的会员API&#xff0c;以及会员相关的自动化任务。 项目功能 计划实现的会员中心功能单元如下&#xff1a; member-api-server&#xf…

10个最佳网站查找和下载Windows和Mac的免费字体

选择合适的字体已成为设计的一个重要组成部分&#xff0c;为了网站的知名度用具有吸引力的字体起着非常重要的作用&#xff0c;在网站带来流量。在这里&#xff0c;今天分享给大家10个网站&#xff0c;提供用于Windows以及为Macintosh的一个优秀的免费字体大集合。 1。UrbanFon…

烂泥:纠结一天的zencart网站问题,终于解决了

本文由51cto.com提供友情赞助&#xff0c;首发于烂泥行天下。本人的博客本来是存放在网站根目录下的wp文件夹下的&#xff0c;访问也正常&#xff0c;一切都正常。但是感觉还是不舒服&#xff0c;因为访问的时候要输入&#xff1a;http://www.lanni654321.com/wp&#xff0c;才…

基于AlipayJSBridge封装的H5网页支付宝打赏、网站打赏、个人免签支付,支付宝转账打赏支付组件

之前公司要做个打赏用户的功能&#xff0c;网站查询一些资料之后把一些api封装之后提供了一个demo组件供大家下载&#xff1a;扫描下图二维码 功能&#xff1a; 支付宝H5 Js方案&#xff0c;调起应用内页面&#xff0c;自动设定转账金额和收款理由&#xff0c;用户付款时可…

超牛SEO经验:新站如何做到秒收和快速排名首页

超牛SEO经验&#xff1a;新站如何做到秒收和快速排名首页在SEO百科看到这个SEO标题进来之后&#xff0c;你一定会觉得惊讶&#xff01;新站是如何做到秒收的&#xff1f;在淘宝&#xff0c;还有人以欺负SEO新手的无知&#xff0c;开出了800元秒收的高价&#xff1b;在QQ群&…

Shareoint Server 2013 Step By Step之管理网站权限级别

管理权限级别在SharePoint Server中&#xff0c;我们可以对用户或用户组分配网站权限&#xff0c;当用户添加到SharePoint组的时候&#xff0c;其实也通过SharePoint组直接分配了权限给该用户&#xff0c;下面我们了解下如何在SharePoint站点中给用户或用户组分配权限。权限级别…

.net 引用 其他文件类_在 Blazor WebAssembly 静态网站中部署ML.NET机器学习模型

目前世面上有许多方法来部署机器学习模型。最常见的方法是通过 API 或 serverless functions 将模型公开为 Web 服务。将模型部署为 Web 服务时&#xff0c;其中一个注意事项是延迟和性能。使用模型基于 HTTP 进行预测的过程包括接受用户输入、从文件中加载模型的序列化版本、使…

python下载网站视频_【python爬虫实战】批量下载网站视频

写在前面最近在学vue.js&#xff0c;看到一个网站上有很多视频教程&#xff0c;但在线观看不能倍速播放&#xff0c;就想着用python爬虫批量下载到本地。安装依赖pip3 install requests测试样例加上序言总共有16个视频&#xff0c;我们用python爬虫技术批量下载到本地。https:/…

大型网站架构体系的演变

文章出处来源摘自 微信--IT搬运工 地址&#xff1a;http://mp.weixin.qq.com/s?__bizMzAxNTI4NDAzNA&mid205960169&idx1&sn765e64eef36e5d459d69bbc11dd0c11d&keyc468684b929d2be2dea6dd3defba65255295bcd81d2374e6ab6b07547319d2760635b2617d8ccd8dcb448b446…

python如何爬取图片到指定文件夹_抓取某网站一分类下所有的图片(python小白登天日记)...

废话先不多说&#xff0c;先上代码&#xff1a;import requests from bs4 import BeautifulSoup import os,re import sys reload(sys) sys.setdefaultencoding(utf8) url http://www.bfpgf.com/yld user_agent Mozilla/4.0 (compatible; MSIE 5.5; Windows NT) headers { U…

网站三层架构学习之一 分层式结构

去年参加中软的面试&#xff0c;戴老师就说让好好研究一下petshop。可是今年来了以后&#xff0c;老师让做即墨公司的语音项目&#xff0c;一直进行的是windows编程&#xff0c;没有接触网站方面的。现在项目基本做完了&#xff0c;开始ASP.NET的学习了。 现在petshop的最新版本…