目录

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

前言

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

{% 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 models class 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 views urlpatterns = [
url(r'^reboot', views.rebootserver),
url(r'^restartserver', views.restartserver),
]

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

# -*- coding: utf-8 -*-
from __future__ import unicode_literals from 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 models
username = request.session.get('username')
# 取出数据库后10条重启的数据
reboot = models.rebootserver.objects.all()[::-1][0:10]
taskor = ''
try:
# 后台是否有其他人在重启
taskor = models.taskinbackground.objects.get(taskname='reboot').taskor
except Exception as e:
print e
pagedict = {'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 rebootserver
from server import models
username = 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'] = False
return JsonResponse(ret)
else:
models.rebootserver.objects.create(rebooter=username, reboottime=local_time, rebootresult='重启失败')
models.taskinbackground.objects.filter(taskname='reboot').delete()
ret['status'] = False
return 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所示。

{% 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描述。通俗点说,其实就相当于用数据库做了一个互斥量,一次只准一个线程执行任务

结语

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

django搭建一个小型的服务器运维网站-重启服务器的进程的更多相关文章

  1. django搭建一个小型的服务器运维网站-查看服务器中的日志与前端的datatable的利用

    目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...

  2. django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板

    目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...

  3. django搭建一个小型的服务器运维网站-查看和修改服务器配置与数据库的路由

    目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...

  4. django搭建一个小型的服务器运维网站-用户登陆与session

    目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...

  5. django搭建一个小型的服务器运维网站

    前言   不管是运维还是开发抑或是测试,工作中不免会和Linux服务器打交道,常见的操作譬如:查看CPU或内存状态.查看和修改服务器时间.查看或者修改服务器配置文件.实时查看或回看系统的日志.重启服务 ...

  6. 10分钟搭建一个小型网页(python django)(hello world!)

    10分钟搭建一个小型网页(python django)(hello world!) 1.安装django pip install django 安装成功后,在Scripts目录下存在django-ad ...

  7. 初学django搭建一个通讯录应用

    ---恢复内容开始--- django搭建一个通讯录应用 一.环境介绍 window10 64位 Django-1.5.12 python 2.7 Sqlite3 二.基本安装 python2.7安装 ...

  8. 30分钟搭建一个小型网站框架(python django)

    最近因为要做一个小型的网站,需求很简单有点像公司内部的管理网站,和室友一起倒腾,发现了一些坑.我自己之前没有接触过python 但是发现真的非常好上手. 我们没人会前端,所以最怕修改网页,一开始选择了 ...

  9. 用django搭建一个简易blog系统(翻译)(一)

    Django 入门 原始网址: http://www.creativebloq.com/netmag/get-started-django-7132932 代码:https://github.com/ ...

随机推荐

  1. PTA 1154 Vertex Coloring

    题目链接:1154 Vertex Coloring A proper vertex coloring is a labeling of the graph's vertices with colors ...

  2. 找不到/lib/modules/../build文件夹

    :解决了make: *** /lib/modules/3.2.0-4-amd64/build: 没有那个文件或目录的问题,更新一下软件列表,然后sudo apt-get install linux-h ...

  3. (转载)如何在 Github 上发现优秀的开源项目?

    转载自:传送门 之前发过一系列有关 GitHub 的文章,有同学问了,GitHub 我大概了解了,Git 也差不多会使用了,但是还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? 问到 ...

  4. 《JAVA设计模式》之代理模式(Proxy)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述代理(Proxy)模式的: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 代理模式的结 ...

  5. spring-第一篇之spring核心机制依赖注入(DI)/控制翻转(IoC)

    1.spring的核心机制:依赖注入(DI)/控制翻转(IoC) 什么是依赖:A对象需要调用B对象,所以A依赖于B. 什么是注入:A对象注入一个属性B对象. 什么是依赖注入(DI):A对象依赖于B对象 ...

  6. Java稀疏数组

    一.概述 1.概念 2.处理方法 3.示例 原数组如下: 转换为稀疏数组如下: 二.代码 1.主方法 @Testpublic void SparseTest() { // 创建一个原始的二维数组 11 ...

  7. hdu 4453 约会安排(线段树区间合并)

    约会安排 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submis ...

  8. Windows组决策

    https://blog.csdn.net/wangjunjun2008/article/details/82426587

  9. day65--mysql数据库--索引、慢日志、分页

    ---恢复内容开始--- 一.索引 (一)介绍: 数据库中专门用于帮助用户快速查找数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置吗,然后直接获取. (二)作用: ...

  10. 基于ZYNQ XC7Z045 FFG 900的高性能计算模块

    一.板卡概述 本板卡基于Xilinx公司的FPGA XC7Z045 FFG 9000 芯片, 该平台为设计和验证应用程序提供了一个完整的开发平台.该平台使设计师能够更加简单进行高性能的原型设计,并且通 ...