篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你不知道的CS模式的进程管理工具,状态监测项目启停一目了然!相关的知识,希望对你有一定的参考价值。
(摘自百度百科)Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
【阅读全文】
Supervisor安装
\'\'\'
环境:Centos7
安装wget:yum install wget
下载Supervisor源码包
\'\'\'
# [root@localhost software]# yum install wget
# 已加载插件:fastestmirror
# Loading mirror speeds from cached hostfile
# * base: mirror.lzu.edu.cn
# * extras: mirror.lzu.edu.cn
# * updates: mirrors.163.com
# 正在解决依赖关系
# --> 正在检查事务
# ---> 软件包 wget.x86_64.0.1.14-18.el7_6.1 将被 安装
# [root@localhost software]# wget https://files.pythonhosted.org/packages/d3/7f/c780b7471ba0ff4548967a9f7a8b0bfce222c3a496c3dfad0164172222b0/supervisor-4.2.2.tar.gz
# --2021-09-24 15:45:28-- https://files.pythonhosted.org/packages/d3/7f/c780b7471ba0ff4548967a9f7a8b0bfce222c3a496c3dfad0164172222b0/supervisor-4.2.2.tar.gz
# 正在解析主机 files.pythonhosted.org (files.pythonhosted.org)... 151.101.77.63, 2a04:4e42:12::319
# 正在连接 files.pythonhosted.org (files.pythonhosted.org)|151.101.77.63|:443... 已连接。
# 已发出 HTTP 请求,正在等待回应... 200 OK
# 长度:463657 (453K) [application/x-tar]
# 正在保存至: “supervisor-4.2.2.tar.gz”
Supervisor配置
\'\'\'
1、解压源码包
tar -zxvf supervisor-4.2.2.tar.gz
\'\'\'
# root@localhost software]# tar -zxvf supervisor-4.2.2.tar.gz
# supervisor-4.2.2/
# supervisor-4.2.2/CHANGES.rst
# supervisor-4.2.2/COPYRIGHT.txt
\'\'\'
2、安装python支持
yum install python-setuptools
\'\'\'
# [root@localhost supervisor-4.2.2]# yum install python-setuptools
# 已加载插件:fastestmirror
# Loading mirror speeds from cached hostfile
\'\'\'
3、编译源码包
python setup.py install
\'\'\'
# [root@localhost supervisor-4.2.2]# python setup.py install
# running install
# running bdist_egg
# running egg_info
# writing requirements to supervisor.egg-info/requires.txt
\'\'\'
4、编译后删除其他多余文件、除了build、dist两个文件夹其他都是多余的
\'\'\'
# [root@localhost supervisor-4.2.2]# ll
# 总用量 0
# drwxr-xr-x. 4 root root 43 9月 24 15:51 build
# drwxr-xr-x. 2 root root 40 9月 24 15:51 dist
\'\'\'
5、创建配置文件、编辑配置文件、赋予文件权限
\'\'\'
# echo_supervisord_conf > /usr/etc/supervisord.conf
# [root@localhost supervisor-4.2.2]# vi /usr/etc/supervisord.conf
# chmod 777 /usr/etc/supervisord.conf
# [root@localhost supervisor-4.2.2]# mkdir config
# /usr/etc/supervisord.conf文件主要配置两个关键项
# [supervisord]
# user=普通用户名称 ; setuid to this UNIX account at startup; recommended if root
# [include]
# files = /software/supervisor-4.2.2/config # 这个是以后的项目路径
\'\'\'
6、查看版本
\'\'\'
# [root@localhost supervisor-4.2.2]# supervisord -v
# 4.2.2
\'\'\'
7、解决python2.7.sock报错的问题
\'\'\'
# [root@localhost supervisor-4.2.2]# /usr/bin/python2 /usr/bin/supervisord -c /usr/etc/supervisord.conf
\'\'\'
8、更新配置
\'\'\'
# supervisorctl update
\'\'\'
9、配置一个程序项目配置
注意:这里使用hello_world只是作为一个说明,一般项目指的都是一直运行的进程服务,比如:redis、tomcat、nginx等等。
\'\'\'
# [root@localhost config]# vi hello_world.config
# [program:hello_world]
# command=/usr/bin/python2 /software/supervisor-4.2.2/hello_world.py
# priority=998
# autostart=true
# autorestart=true
# startsecs=60
# startretries=3
# stopsignal=TERM
# stopwaitsecs=10
# user=root
# stdout_logfile=/software/supervisor-4.2.2/logs/hello_world.log
# stdout_logfile_maxbytes=100MB
# stdout_logfile_backups=10
# stdout_capture_maxbytes=1MB
# stderr_logfile=/software/supervisor-4.2.2/logs/hello_world.log
# stderr_logfile_maxbytes=100MB
# stderr_logfile_backups=10
# stderr_capture_maxbytes=1MB
\'\'\'
10、创建hello_world项目
注意:这里使用hello_world只是作为一个说明,一般项目指的都是一直运行的进程服务,比如:redis、tomcat、nginx等等。
\'\'\'
# [root@localhost supervisor-4.2.2]# vi hello_world.py
# # -*- coding:utf-8 -*-
# print "我是hello_world程序"
\'\'\'
11、重启配置的所有程序
\'\'\'
# [root@localhost supervisor-4.2.2]# supervisorctl reload
# Restarted supervisord
\'\'\'
12、启动或停止某个项目
注意:这里使用hello_world只是作为一个说明,一般项目指的都是一直运行的进程服务,比如:redis、tomcat、nginx等等。
\'\'\'
# supervisorctl start 项目名称
# supervisorctl start hello_world
# supervisorctl stop 项目名称
# supervisorctl stop hello_world
【往期精选】
● 如何将一个python应用以docker镜像的方式来运行?
● python-celery专注于实现分布式异步任务处理、任务调度的插件!
● python远程服务操作工具:fabric,远程命令、本地命令、服务器操作利器!
● python超赞插件you-get,执行一行命令即可下载、命令行下载工具推荐!
● 办公自动化:Python-win32com自动将word文档转换成pdf格式!
● pandas数据统计插件的连接函数concat()妙用,灵活处理数据对象!
● Git LFS 3.0.0 发布,对大文件进行版本控制的 Git 扩展
● python有序序列的字典序列推导式运用技巧!
● Django 4.0 alpha 1 发布
● python经典有序序列的list列表推导式实践运用
● python常用转义字符串总结:各种字符转义的不同、如何取消转义字符效果?
● python内置函数通过字符串的方式来执行函数代码块,类似java的反射机制相当强大!
● 磨刀不误砍柴工,PyCharm开发工具的常规配置,充分提高开发效率!
● python-openpyxl Excel的单元格样式设置,包括字体、样式、宽高等等!
Vuet.js是什么?
Vuet.js是给Vue.js提供状态管理的一个工具,与vuex不同,它是一种崇尚规则定制的状态管理模式。事先将状态更新的规则写好,然后将规则注入到组件中,然后状态按照预订的规则来进行更新。
github:
Vuet.js
主动型和被动型规则
Vuet.js内置了life
、manual
、need
、once
、route
这几种常见的规则,除了manual
规则外,其他都是属于主动型更新规则,在达到一定的条件上会自动触发状态更新。
life
描述: 每次都会在组件的beforeCreate钩子中调用一次更新,组件销毁时在destroyed钩子,状态会被重置,恢复到初始状态
在一个父组件中,想和自己的子子组件进行通信,但是又不希望父组件销毁之后,原来的状态还在,life
规则就是专门针对这种场景的,在组件销毁时,模块的状态也会随之恢复到初始状态
manual
manual规则允许将各种更新模块状态的方法集中起来管理,等待用户来手动触发对应的模块更新,比如记录用户点击一个按钮的次数:
<!--index.html-->
<div id="app">
{{ count }}
<button @click="$count.plus">计数</button>
</div>
<script>
// main.js
import Vue from ‘vue‘
import Vuet, { mapModules, mapRules } from ‘vuet‘
const vuet = new Vuet({
modules: {
count: {
data () {
return 0
},
manuals: {
plus ({ state }) {
// 允许同步、或者异步的更新
this.setState(++state)
}
}
}
}
})
export default new Vue({
el: ‘#app‘,
vuet, // vuet实例注入到vue实例
mixins: [
mapModules({ count: ‘count‘ }), // 组件连接模块
mapRules({
manual: ‘count‘ // 使用manual规则向组件注入操作模块数据的更新方法
})
]
})
</script>
通过上面的代码,就可以得知Vuet.js是天然的支持多组件进行通信,总之它是简单的,敏捷的。manual
规则默认以$模块名称
将方法集合注入到组件中,使得代码在阅读方面会更友好,更通俗易懂,同时代码也会更优雅。
need
描述: 每次都会在组件的beforeCreate钩子中调用一次更新
比如有一个消息的数量,我希望每次打开消息页面的时候,消息数量都能自动更新,这种场景使用need
规则就再合适不过了
once
描述: 仅第一次在组件的beforeCreate钩子中调用一次更新,之后在任何组件都不会再进行更新
比如你A、B、C三个页面,都需要选择省市区,而这些数据几乎是不可变的,所以之后就没有再必要进行更新了。once
的规则就能帮你节省了不必要的请求,帮你优化程序
route
哈哈,这个篇幅有点大,等下次专门开篇文章进行讲解。
总结
vuet允许你将有规律的状态更新,封装成一种规则,从而提升你的开发效率,比如说需要定时向服务器更新消息,这也是一种规则,下次有时间,我们可以专门写这样的一个规则。