日期: 2021 年 4 月 25 日

在linux服务器中查看tomcat和jdk的版本

1.先连接linus服务器

2.ps -ef | grep 'tomcat' 查看tomcat所在位置
%title插图%num

3.进入需要查看的tomcat路径的bin目录 sh version.sh 即可查看 %title插图%num

4.Server version tomcat版本 :Apache Tomcat/7.0.53 JVM Version jdk版本:1.7.0_79

*简单的查看自己Tomcat版本的方式

1.先进入dos窗口,快捷键:win+r,弹出窗口,输入cmd,点击确定进入

%title插图%num

2.在dos窗口中,先切换目录,找到tomcat存放的目录地址。如图所示

注意:直接进入到tomcat\bin目录才能运行命令,我的路径是(F:\tomcat\bin)

%title插图%num

3.直接输入version命令,直接就输出版本信息

%title插图%num

查看服务器tomcat版本

一、通过tomcat版本文件查看
找到tomcat目录,进入”xxx/tomcat/bin” 目录,执行”sh version.sh”。如果没有设置JAVA_HOME和JRE_HOME环境变量则会报如下错误:

[jerry@host xxx/tomcat/bin]
$sh version.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

设置JAVA_HOME和JRE_HOME环境变量:

export JAVA_HOME=xxx/java/
export JRE_HOME=xxx/java/jre/

执行”sh version.sh”返回当前tomcat版本信息:

$sh version.sh
Using CATALINA_BASE: xxx/tomcat
Using CATALINA_HOME: xxx/tomcat
Using CATALINA_TMPDIR: xxx/tomcat/temp
Using JRE_HOME: xxx/java/jre/
Using CLASSPATH: xxx/tomcat/bin/bootstrap.jar:xxx/tomcat/bin/tomcat-juli.jar
Using CATALINA_PID: xxx/tomcat/catalina.pid
Server version: Apache Tomcat/7.0.47
Server built: Jan 10 2014 01:31:08
Server number: 7.0.47.0
OS Name: Linux
OS Version: 3.10.0-327.2016.os7.x86_64
Architecture: amd64
JVM Version: 1.8.0_66-b60
JVM Vendor: “mmm”

二、通过tomcat启动文件查看
找到tomcat启动文件,本文是yyy/tomcat_stdout.log,搜索”Starting Servlet Engine”则可看到当前启动的容器版本。


2018-07-31 19:06:27,446 org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=xxx/tomcat
2018-07-31 19:06:27,447 org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.io.tmpdir=/zzz/.default/temp
2018-07-31 19:06:27,571 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“http-bio-7001”]
2018-07-31 19:06:27,586 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 842 ms
2018-07-31 19:06:27,628 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
2018-07-31 19:06:27,629 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.59.463

要做好云计算所需要的成本,主要分为哪六大成本?

中国的云计算是个快速发展的行业,业内里的玩家很拼,也吸引了很多人临渊慕鱼。我在曾经和很多人聊过如何设计、采购、投资或者监管云计算,现在将我的观点通过网文分享给大家。

要做好云计算必须的成本主要分六大类,我们一起来看下六大成本:

1. 硬件成本

硬件成本主要就是采购服务器、交换机及其零部件的成本。土豪大厂还会采购硬件负载均衡和硬件存储,科研大厂还会自研整柜服务器。这里小厂商只能用常规价买服务器,大厂商一次采购上万台服务器,能把供应商的利润压榨到低于余额宝收益。

我一直说Intel是云计算行业*大赢家,每个云计算大会Intel都会慷慨赞助,因为只要你的技术选型不太偏门,都离不开Intel的硬件。

2. 机柜成本

机柜成本简单说就是电力成本,电力是实打实的资源,不是摔一把钞票到地上就能买到电力,IDC的不间断供电要求是等同于ICU病房的。小型云厂商基本都是一个13安电机柜每月花四五千块钱;大型云厂商都是自营无利润IDC、整柜服务器、高效散热系统,虽然节能效率有夸大吹嘘的成分,但成本是远低于小型云厂商的。

3. 网络成本

网络成本包含IP和带宽,租一小段IP不贵,但是以现在IP(v4)地址的稀缺状态,有钱也可能买不到几万个IP。带宽是云计算运营的硬成本,大厂商的集采压价优势同样明显,而且大厂商还可以拉很多对等互联网络节省资费。此外还有DDOS问题、IP段被污染问题、ICP备案问题等等,也在提高网络成本。

4. 闲置成本

巨大的采购体量必然会造成*大的资源闲。假设我一次采购上架200柜服务器,那就要售出5万台虚拟机才能充分利用硬件。硬件从上架之时就在不停的折旧,但虚拟机能卖多快却不好预估。而你可以随时上线200个机柜,那就代表机柜和网络也留了很多富余。

理论上来说,大厂商规模大,富余闲置的百分比会小一些,小厂商规模有限,富余闲置的百分比会大一些。但以前从未有过需要“机柜+带宽+服务器”一起做规划预估的情况,大厂商的资源估算人员未必估的够准确,往往会“饥一顿、饱一顿”,不是资源紧绷到过度超卖,就是资源像大水漫灌一样的浪费;而对小厂商来说,客户固定估算简单,就算资源不足也不会成为大新闻。所以,闲置成本这一块各有千秋,说不清楚谁的成本更低。

5. 人力成本

作为云计算从业人员,感谢这个行业给我们带来了高薪。对公司来说,高薪招揽技术人才可以提高公司核心竞争力,*大加快产品上线速度。如果工资翻倍挖个技术人员,让某个项目提前半年上线,或者多花了200万雇个5人小组,但融资金额多了3000万,从公司角度是包赚不赔的。

说技术人员的具体薪水有点泄密,我们八卦一下某些销售人员也能惊掉外行的下巴。一个智商和沟通能力都正常,无任何特殊社会资源,公司商机正常分配的商务客服级销售人员,他们的底薪和提成是其他软件行业销售的2-5倍。别说你不信,刚确认这个消息的时候,我也郁郁寡欢了好几天。

那些自负盈亏、没有VC资金支持的老一代厂商都在尝试转云,但他们的员工待遇太低了,在抢人大战中没有任何胜算,这一点,从很多传统IT公司出来的技术人员体验*深。

6. 市场成本

云计算企业的品宣和会务的成本可能比传销公司还高。以某*火runtime环境为例,据知情人士透露该行业的初创公司50%的成本用在品宣了。每年到开各种技术会议的时候,机票酒店都会涨价,大量二手售卖会议赠品,也是一片繁华景象。

无论是初创公司还是大公司的云计算分舵,都不愿意这样烧钱,但你不烧钱市场就会忽略你的存在。上文说到一些普通销售靠公司分配商机,也和强大的市场引流(烧钱)能力有很大关系,只要产品过硬,多参会总是不亏的。

成本综合评估

综上所述,前三条成本,大厂商相对小厂商占据了*对优势,但大厂商之间的成本区别并不大,因为硬件降价折扣是有底线,全国能拿到低价服务器、机柜和带宽的厂商,肯定超过十家了。企业客户是理性选择供应商,并不会盲目黏在一个平台不走,而各厂的技术差距早晚是能追平的,后入场的大玩家一样有插足分羹的机会。

云计算的4种部署模型与3种服务模式的介绍

云计算、大数据、物联网、人工智能,可谓是*近几年大热之词,热度一浪高过一浪,今天主要介绍的是云计算,私有云、公有云、混合云、社区云,大家都耳熟能详,却不知道属于什么,这篇文章以云计算部署模型和服务模式为主题,为大家介绍。

云计算的4种部署模型:

1.私有云,云端资源只给一个单位组织内的用户使用,这是私有云的核心特征。而云端的所有权、日常管理和操作的主体到底属于谁并没有严格的规定,可能是本单位,也可能是第三方机构,还有可能是二者的联合。云端位于本单位内部,也可能托管在其他地方。

2.社区云,云端资源专门给固定的几个单位内的用户使用,而这些单位对云端具有相同诉求(如安全要求、云端使命、规章制度、合规性要求等)。云端的所有权、日常管理和操作的主体可能是本社区内的一个或多个单位,也可能是社区外的第三方机构,还可能是二者的联合。云端可能部署在本地,也可能部署于他处。

3.公共云,云端资源开放给社会公众使用。云端的所有权、日常管理和操作的主体可以是一个商业组织、学术结构、政府部门或者它们其中的几个联合。云端可能部署在本地,也可能部署于其他地方,比如郑州市民公共云的云端可能就建在郑州,也可能建在洛阳。

4.混合云,混合云由两个或两个以上不同类型的云(私有云、社区云、公共云)组成,它们各自独立,但用标准的或专有的技术将它们组合起来,而这些技术能实现云之间的数据和应用程序的平滑流转。由多个相同类型的云组合在一起属于多云的范畴,比如两个私有云组合在一起,混合云属于多云的一种。由私有云和公共云构成的混合云是目前*流行的——当私有云资源短暂性需求过大时,自动租赁公共云资源来平抑私有云资源的需求峰值。例如,网站在节假日期间点击量巨大,这时就会临时使用公共云资源来应急。

云计算的3种服务模式:

1.软件即服务,云服务提供商把IT系统中的应用软件层作为服务出租出去,消费者不用自己安装应用软件,直接使用即可,这进一步降低了云服务消费者的技术门槛。

2.平台即服务,云服务提供商把IT系统中的平台软件层作为服务出租出去,消费者自己开发或者安装程序,并运行程序。

3.基础设施即服务,云服务提供商把IT系统的基础设施层作为服务出租出云,由消费者自己安装操作系统、中间件、数据库和应用程序。

python发送短信验证码

python发送短信验证码

import ssl,json,random
from qcloudsms_py import SmsMultiSender, SmsSingleSender
from qcloudsms_py.httpclient import HTTPError

configInfo = json.load(open(‘config.json’,encoding=’utf-8′))
sms_appid = configInfo[‘sms’][‘appid’]
sms_appkey = configInfo[‘sms’][‘appkey’]
sms_sms_sign = configInfo[‘sms’][‘sms_sign’]

#短信验证
def send_verify(phone):
appid = sms_appid # 自己应用ID
appkey = sms_appkey # 自己应用Key
sign = sms_sms_sign # 自己腾讯云创建签名时填写的签名内容(使用公众号的话这个值一般是公众号全称或简称)
sender = SmsSingleSender(appid, appkey)
template_id = “877799”
infoList = {}
str = “”
#六位随机数
for i in range(6):
ch = chr(random.randrange(ord(‘0’), ord(‘9’) + 1))
str += ch
try:
response = sender.send_with_param(86, phone, template_id, [str], sign=sign)
infoList[“code”] = 0
infoList[‘data’] = response
infoList[‘p_code’] = str
infoList[‘msg’] = “短信发送成功”
except Exception as e:
response = {‘result’: 1000, ‘errmsg’: “网络异常发送失败”}
infoList[“code”] = 200
infoList[‘data’] = response
infoList[‘msg’] = “短信发送失败”
infoList[‘error’] = e.args
print(infoList)
return infoList

#群发短信
def mass_texting(phone_list, template_id, param_list):
appid = sms_appid # 自己应用ID
appkey = sms_appkey # 自己应用Key
sms_sign = sms_sms_sign # 自己腾讯云创建签名时填写的签名内容(使用公众号的话这个值一般是公众号全称或简称)
sender = SmsSingleSender(appid, appkey)
try:
response = sender.send_with_param(86, phone_list, template_id, param_list, sign=sms_sign)
except HTTPError as e:
response = {‘result’: 1000, ‘errmsg’: “网络异常发送失败”}
return response

python 常用命令合集

python 常用命令合集

一.pip类
1.安装依赖
pip install -r requirement.txt

-r:安装requirement.txt文件中的依赖

2.查看某个包是否安装
pip list |grep opencv-python

3.安装包
pip3 install opencv-python

二.报错类
1.SSL报错
现象:
Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(“hostname

解决:

res = requests.get(url,verify=False)

2.ua报错
现象:
FakeUserAgentError(‘Maximum amount of retries reached’)
解决:

from fake_useragent import UserAgent
def header_fake():
file_path = os.getcwd() + ‘/useragent_fake.json’
ua_fake = UserAgent(path=file_path)
return ua_fake.random

json文件地址:
https://github.com/yesterday808/python_sets/blob/master/useragent_fake.json

python实现服务器之间传输文件

python实现服务器之间传输文件

import os
import paramiko

class SSHConnection(object):

def __init__(self, host, port, username, pwd):
self.host = host
self.port = port

self.username = username
self.pwd = pwd
self.__k = None

def connect(self):
transport = paramiko.Transport((self.host, self.port))
transport.connect(username=self.username, password=self.pwd)
self.__transport = transport

def close(self):
self.__transport.close()

def upload(self, local_path, target_path):
sftp = paramiko.SFTPClient.from_transport(self.__transport)
sftp.put(local_path, target_path)

def download(self, remote_path, local_path):
sftp = paramiko.SFTPClient.from_transport(self.__transport)
sftp.get(remote_path, local_path)

def cmd(self, command):
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
# 执行命令
stdin, stdout, stderr = ssh.exec_command(command)
# 获取命令结果
result = stdout.read()
print(str(result, encoding=’utf-8′))
return result

if __name__ == ‘__main__’:

ssh = SSHConnection(host=’192.168.132.11′, port=10022, username=’***’, pwd=’***’)
ssh.connect()
third_model_data_path = ‘/data/model/’
ssh.cmd(‘mkdir -p /data/model’)
for filename in os.listdir(third_model_data_path):
print(filename)
ssh.upload(third_model_data_path + filename, third_model_data_path + filename)
ssh.close()

用Python制作长春地铁八号线,输出时间和站点

用Python制作长春地铁八号线,输出时间和站点

用Python制作长春地铁八号线,输出时间和站点
菜鸟一枚,如大佬有更好的方式和想法可以指导一下

print(“输入 : 时请用英文输入法写 : ,不然会出错”)
print(“例如:你从哪个地方上地铁:小南站”)
print(“例如:你到哪个站:北湖公园”)
print(“例如:请输入你的上车时间:10:22”)
print(“”)
import random #导入随机库
print(‘ 长春地铁八号线 ‘)
print(“‘北环城路站’,’一二三中学站’,’小南站’,’小城子街站’,’北湖大桥站’,’北湖公园站’,’和安街站’,’光机路站’,’大学城路站’,’地理所站’,’奥林匹克公园站’,’广通路站'”)
Enter_Station=input(‘你从哪个地方上地铁:’)
Out_Station=input(‘你到哪个站:’)
Time_to_enter=input(‘请输入你的上车时间:’)
Enter=Enter_Station
Out=Out_Station
#长春八号线
Changchun_Line_8=[‘北环城路站’,’一二三中学站’,’小南站’,’小城子街站’,’北湖大桥站’,’北湖公园站’,’和安街站’,’光机路站’,’大学城路站’,’地理所站’,’奥林匹克公园站’,’广通路站’]
x = Changchun_Line_8.index(Enter) # 入站地铁索引
y = Changchun_Line_8.index(Out) # 出站地铁索引
z=x #将X值存入Z中 下面for 循环使用
a=y-x # a 中途经过几站 为下面for循环使用
def calculate_time(Time_to_enter): #计算时间函数。并用return函数方式输出

Hour_Branch= Time_to_enter.split(“:”) #将输入的时间以:分开
Hour_and_Branch = [int(j) for j in Hour_Branch]
Hour=Hour_and_Branch[0] #小时
Branch=Hour_and_Branch[1] #分钟
Next_Branch=Branch+Each_time #初试时间+坐车时间
if Next_Branch>60:
Hour=Hour+1
Next_Branch=Next_Branch-60
elif Next_Branch==60:
Hour = Hour + 1
Next_Branch=0
else:
pass
word='{}:{}’
return(word.format(Hour,Next_Branch))

def Time_to_each_Station(Enter_Station,Out_Station):
My_answer=”‘{}到达{}'”
return (My_answer.format(calculate_time(Time_to_enter),Changchun_Line_8[z+1])) #将时间和各个站显示出来

for i in range(a): #for循环,将经过几站(a)循环打印出来
Each_time = random.randint(5, 10) #随机生成时间 用于函数 calculate_time() 计算
print(Time_to_each_Station(Enter_Station,Out_Station)) #调用函数,打印输出时间+站点
z=z+1 #到达站点索引+1,改变下次输出索引
Time_to_enter=calculate_time(Time_to_enter) #将入站时间改为到达站点时间,调用函数计算下一次到达站点的时间

selenium爬取艺恩并数据化展示

selenium爬取艺恩并数据化展示

爬取数据部分
导包
from selenium.webdriver import Chrome
from selenium.webdriver.support.select import Select
from time import sleep
from selenium.webdriver.chrome.options import Options

无头和防屏蔽设置(固定代码,一般*后加上)
opt = Options()
opt.add_argument(‘–headless’)
opt.add_argument(‘–disable gpu’)

请求网址并事先创建一个文件
chrome = Chrome(options=opt)
url = ‘https://www.endata.com.cn/BoxOffice/BO/Year/index.html’
chrome.get(url)
sleep(1)
f = open(‘./movies.csv’, mode=’a’,encoding=’utf-8′)

support库里面的Select模块处理年份问题
select_el = chrome.find_element_by_id(‘OptionDate’)
# 找到切换年份对应的element
select = Select(select_el)
for i in range(len(select.options)):
select.select_by_index(i)
# 用索引的方式进行切换页面
sleep(2)
tr_list = chrome.find_elements_by_xpath(‘//table[@class=”bo-table img-table”]//tr’)[1:]
for tr in tr_list:
for td in tr.find_elements_by_xpath(‘./td’):
f.write(td.text.strip())
f.write(‘,’)
f.write(‘\n’)
f.write(‘\n\n’)
print(‘第%d页打印完毕’ % i)

chrome.close()

数据处理部分
导包
import pandas as pd
1
数据的清洗,去重
data = pd.read_csv(‘./movies.csv’, header=None)
data = data.loc[:, 2:4]
data[5] = data[2].map(lambda i: i.split(‘/’)[0])
# 对数据进行处理,分割后的列表*个放在第五行中
data[6] = data[2].map(lambda i: i.split(‘/’)[1] if ‘/’ in i else 666)
# 对数据进行处理,先进行判断,分割后的列表第2个放在第六行中
data[7] = data[3].astype(str) + data[4].astype(str)
# 列表数据字符串化,然后进行拼接
data_1 = data.loc[:,[5,7]]
data_2 = data.loc[:, [6,7]]
data_2 = data_2.loc[data_2[6] != 666]
# 筛选数据
data_2 = data_2.rename(columns={6:5})
# print(data_1)
# print(data_2)
data = data_1.append(data_2)
data = data.rename(columns={5:’type’,7:’money’})
# 分成两个列表,进行数据筛选拼接,并重命名列表名
# print(data)
data[‘money’] = data[‘money’].astype(int)
booking_o = data.groupby(‘type’).mean().round(2)
# 以type这 一样作为基准进行求平均值,保留小数点后两位
booking_o = booking_o.drop([‘-‘])

booking_o.to_csv(‘./数据.csv’)
# print(booking_o)

可视化展示
导包
from flask import Flask,render_template
import pandas as pd
1
2
Flask可视化展示
app = Flask(__name__)

@app.route(‘/’)
def index():
data = pd.read_csv(‘./数据.csv’)
data.columns = [‘name’,’value’]
# print(data)
data = data.loc[:,[‘value’,’name’]]
data[‘value’] = data[‘value’]//1000
data = data.to_dict(orient=’records’)
# 转化成echart所需要的字典形式
# print(data)
return render_template(‘数据.html’,data=data)
# 一定要代码所在文件夹创建一个templates文件夹(名字固定,不可变).
# html文件保存templates文件夹中才可被读取到

if __name__ == ‘__main__’:
app.run(debug=True)

HTML界面与echart源代码的结合
<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>Title</title>
</head>
<body>
<!—引入echarts—>
<script src=”https://cdn.bootcdn.net/ajax/libs/echarts/5.0.2/echarts.min.js”></script>
<div id=”main” style=”width: 800px;height:600px;blackgroup:pink”></div>
<script type=”text/javascript”>
var myChart = echarts.init(document.getElementById(‘main’));
var option = {
legend: {
top: ‘bottom’
},
toolbox: {
show: true,
feature: {
mark: {show: true},
dataView: {show: true, readOnly: false},
restore: {show: true},
saveAsImage: {show: true}
}
},
series: [
{
name: ‘面积模式’,
type: ‘pie’,
radius: [50, 250],
# 调节半径值与数据值进行适配,改变饼图展示模样
center: [‘50%’, ‘50%’],
roseType: ‘area’,
itemStyle: {
borderRadius: 8
},
data:{{data|tojson}}
# 一定要加上 |tojson 把字典转换成字符串才能展示
}
]
};
myChart.setOption(option);
</script>
# 使用的饼图链接:https://echarts.apache.org/examples/zh/editor.html?c=pie-custom
</body>
</html>

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速