shell脚本部分:

#!/bin/bash 主脚本
(./cem-demo_publish_front)
(./cem-demo_publish_backend) #!/bin/bash 后端脚本
cd /data/www/cem-base-demo && git pull && ./restart_all.sh #!/bin/bash 前端脚本
cd /data/www/cem-front-demo && rm -fr dist && git pull && npm run build
#cp /data/www/cem-front/index.html /data/www/cem-base/static/index_prod.html
cp -fr /data/www/cem-front-demo/dist /data/www/cem-base-demo/ #!/bin/bash restart_all.sh
python restart_port.py all 9060 4

Python  restart_port.py 文件

 # encoding=utf8

 import sys
import commands
import os
import re
import getpass
import time
import requests current_user = getpass.getuser() def get_pid(port):
output = commands.getoutput('ps aux|grep "[p]ython main.py"')
lines = output.split('\n')
ps_dict = {}
re_obj = re.compile(r'%s +(\d+).*main\.py (\d+)$' % current_user)
for line in lines:
result = re_obj.findall(line)
if not result:
continue
pid, port1 = result[0]
ps_dict[port1] = pid return ps_dict.get(str(port)) def usage():
print 'Usage: restart_port.py <port|all> <port_from> <process_number>'
sys.exit(1) def kill_port(port):
pid = get_pid(port)
if pid:
cmd = 'kill -9 %s' % pid
print 'killing process ...'
status, output = commands.getstatusoutput(cmd)
# time.sleep(2)
print 'process %s for port %s is killed' % (pid, port) def restart_port(port):
pid = get_pid(port)
if pid:
cmd = 'kill -9 %s' % pid
status, output = commands.getstatusoutput(cmd)
time.sleep(1)
cmd = 'nohup python main.py %s >> logs/p_%s.log &' % (
port, port)
# status,output = commands.getstatusoutput(cmd)
os.system(cmd) def check_port_is_health(port):
need_check = True
while need_check:
time.sleep(1)
try:
response = requests.get('http://127.0.0.1:%s' % port)
if response.status_code == 200:
need_check = False
else:
need_check = True
print 'response.status_code=', response.status_code
except Exception, e:
print 'port=', port, str(e)
need_check = True
if need_check:
print 'port=', port
restart_port(port) if __name__ == '__main__':
try:
port = sys.argv[1]
except:
usage() if port == 'all':
try:
port_from = int(sys.argv[2])
except:
usage() try:
process_number = int(sys.argv[3])
except:
usage() for port in range(port_from, port_from + process_number):
restart_port(port)
# check_port_is_health(port)
elif port == 'kill':
try:
port_from = int(sys.argv[2])
except:
usage() try:
process_number = int(sys.argv[3])
except:
usage() for port in range(port_from, port_from + process_number):
kill_port(port)
else:
restart_port(port)
check_port_is_health(port)

restart_port.py

Tornado + vue.js 前后端分离运行脚本的更多相关文章

  1. python django框架+vue.js前后端分离

    本文用于学习django+vue.js实现web前后端分离协作开发.以一个添加和删除数据库书籍应用为实例. django框架官方地址:https://www.djangoproject.com/ vu ...

  2. 全宇宙首个.NET5+Vue.js前后端分离以及业务模块化快速开发框架【NetModular】发布~

    最近.Net圈子很热闹啊,我也来凑凑,今天中午耗时长达半小时,把NetModular升级到了.NET5,详情查看分支https://github.com/iamoldli/NetModular/tre ...

  3. Flask & Vue 构建前后端分离的应用

    Flask & Vue 构建前后端分离的应用 最近在使用 Flask 制作基于 HTML5 的桌面应用,前面写过<用 Python 构建 web 应用>,借助于完善的 Flask ...

  4. gin+vue的前后端分离开源项目

    该项目是gin+vue的前后端分离项目,使用gorm访问MySQL,其中vue前端是使用vue-element-admin框架简单实现的: go后台使用jwt,对API接口进行权限控制.此外,Web页 ...

  5. vue+springboot前后端分离实现单点登录跨域问题处理

    最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot的.因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统.那就意味着做单点登 ...

  6. 一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

    一.前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 c ...

  7. docker-compose 部署 Vue+SpringBoot 前后端分离项目

    一.前言 本文将通过docker-compose来部署前端Vue项目到Nginx中,和运行后端SpringBoot项目 服务器基本环境: CentOS7.3 Dokcer MySQL 二.docker ...

  8. SpringBoot+Jpa+SpringSecurity+Redis+Vue的前后端分离开源系统

    项目简介: eladmin基于 Spring Boot 2.1.0 . Jpa. Spring Security.redis.Vue的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 ...

  9. 基于Vue的前后端分离项目实践

    一.为什么需要前后端分离 1.1什么是前后端分离  前后端分离这个词刚在毕业(15年)那会就听说过,但是直到17年前都没有接触过前后端分离的项目.怎么理解前后端分离?直观的感觉就是前后端分开去做,即功 ...

随机推荐

  1. Dynmaics 365 scale group

    关于scale Groups的概念,在看Dynamics crm online的时候,一直不理解缩放组scale group的概念,后来查到GP也在用这个概念,想想不就是动态扩展嘛,马上顿悟了,原来如 ...

  2. Access to XMLHttpRequest at xxxx from origin ‘null‘ has been blocked by CORS policy:

    使用前后端分离的方式创建web项目的时候出现问题: 这是因为 ajax 请求的对应的域在本地的一个文件路径,比如在D盘的某个文件夹,这里存放的都是前端文件: 但是对应的服务器是 localhost 的 ...

  3. 代码生成器插件与Creator预制体文件解析

    前言 之前写过一篇自动生成脚本的工具,但是我给它起名叫半自动代码生成器.之所以称之为半自动,因为我觉得全自动代码生成器应该做到两点:代码生成+自动绑定.之前的工具只做了代码生成,并没有做自动绑定,所以 ...

  4. fetch封装

    import {fetch as fetchPro} from "whatwg-fetch" import qs from "qs" const get=(ur ...

  5. java 访问修饰符与代码块

    一 访问修饰符 要想本包中的类都可以访问不加修饰符即可:  要想仅能在本类中访问使用private修饰: 要想本包中的类与其他包中的子类可以访问使用protected修饰 要想所有包中的所有类都可以访 ...

  6. C#LeetCode刷题-字典树

    字典树篇 # 题名 刷题 通过率 难度 208 实现 Trie (前缀树)   48.6% 中等 211 添加与搜索单词 - 数据结构设计   39.9% 中等 212 单词搜索 II   27.9% ...

  7. C#开发笔记之07-如何实现交换2个变量的值而不引入中间变量?

    C#开发笔记概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/963 访问. 这里给出常见的7种方法,仅供大家参考,部 ...

  8. vue或者js中平均分割数组

    vue中 把一段长数组按照指定份数 均分 sliceArray(array, size) { var result = []; for (var x = 0; x < Math.ceil(arr ...

  9. JavaScript基础-01

    1. Javascript是一门动态的.弱类型的.解释型的脚本语言 动态:数据类型在运行时决定 弱类型:变量数据的类型不是确定的,可以随意的进行改变: 解释型:相对编译型来说,编译型计算机在执行之前需 ...

  10. Python 批量保存word

    from docx import Document path = r'D:\pywork\12' # word信息表所在文件夹 w = Document(path + '/' + 'word模板表.d ...