linux的kp命令,Linux命令指南(二)

自动化监控与报警

自动监控CPU,内存使用率

安装wechatpy、cryptography模块

import psutil, time, datetime

class Monitor():

cpu_data = []

@classmethod

def mem(cls, mem_max=90):

"""内存使用监控"""

val = psutil.virtual_memory().percent

# print(val)

if val > mem_max:

cls.send_msg('内存使用率为{:1f}%,超过{}%,请关注!!!'.format(val, mem_max))

@classmethod

def cpu(cls, cpu_max=90):

"""CPU使用监控"""

val = psutil.cpu_percent(1)

cls.cpu_data.append(val)

print(cls.cpu_data)

if len(cls.cpu_data) >= 3:

avg = sum(cls.cpu_data)/len(cls.cpu_data)

if val > cpu_max:

# cls.send_msg('CPU使用率为{:1f}%,超过{}%,请关注!!!'.format(avg, cpu_max))

# cls.email('CPU使用率为{:1f}%,超过{}%,请关注!!!'.format(avg, cpu_max))

cls.weChat('CPU使用率为{:1f}%,超过{}%,请关注!!!'.format(avg, cpu_max))

print('已向微信发送警告消息')

cls.cpu_data.pop(0)

@classmethod

def send_msg(cls, content):

"""发送报警信息"""

print(content)

@classmethod

def email(cls, content):

import smtplib

from email.mime.text import MIMEText

from email.utils import formataddr

nickname = '监控程序'

sender = '295844041@qq.com'

password = 'wkezvmukjgqjbhjb'

reciever = 'zhengshucheng@idataway.com'

msg = MIMEText(content, 'html', 'utf-8')

msg['From'] = formataddr([nickname, sender])

msg['Subject'] = '自动报警' # 邮件主题

server = smtplib.SMTP_SSL('smtp.qq.com', 465)

try:

server.login(sender, password)

server.sendmail(sender, [reciever], msg.as_string())

except Exception as err:

print(er)

finally:

server.quit()

@classmethod

def weChat(cls, content):

"""发送微信提醒"""

from wechatpy import WeChatClient

client = WeChatClient('wxfe4f8777c09bd3fe', '71a2f3afbc44cfd56585dbe4e63dbbe8')

template_id = 'XJ-ezE5udUqsPg6XlC_O7y9nX5Ttu3sxwgKp6MUmYF4'

openid = 'oUyaM1Ra-KKjHRaiyNepr1ju1sZI'

data = {

'msg':{'value': content,'color': '#173177'},

'time': {'value': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'color': '#173177'},

}

client.message.send_template(openid, template_id, data)

"""

mem_max = 25

Monitor.mem(mem_max)

"""

cpu_max = 1

while True:

Monitor.cpu(cpu_max)

time.sleep(2)

自动化安装与配置——以ngix为例

自动化安装-以源码编译方式

自动化配置

自动化部署

分布式版本工具git的使用

为git仓库创造一个用户

useradd -m git #创建一个git的用户

为git用户设置密码

passwd git

切换到git用户

su - git

初始化仓库

git init --bare .git # --bare表示创建的是空的仓库

使用Fabric批量部署项目

Docker

docker安装

service docker stop/start/restart

docker info # 查看当前docker更多信息

docker --help # 查看相应帮助文档

镜像管理

docker pull alpine # 拉取未指定标签的alpine

使用docker image 查看相关命令

docker image

docker image ls 或docker images # 当前已拉取的镜像

docker image rm # 删除镜像

不要死记硬背命令,要善于查看帮助

容器管理

输入docker 查看相关命令

docker

查看管理命令

docker run alpine echo "hello docker"

docker container ls 或docker ps # 查看正在运行的镜像

docker container ls -a # 查看容器

docker container # 删除容器

docker run -d alpine ping www.baidu.com # 后台使用alpine 去ping百度

docker stop # 停止容器运行

docker run --rm # 容器停止运行后会自动删除容器,同时数据也会被删除

数据卷

将物理机中的目录映射到容器中

docker run --rm -v /root:/data alpine touch /data/test.txt # 将物理机中root目录映射到容器data中去,在容器data中创建一个文件test.txt,这个

docker run --rm -v "$(pwd):/data" alpine touch /data/test.txt # 将物理机中 **当前目录** 映射到容器data中去

docker run --rm -v "$(pwd):/data:ro" alpine touch /data/test.txt # 加上ro表明只进行**只读**映射

在docker中运行web服务

从docker hub中获取nginx镜像

docker pull nginx:alpine # 下载标签为alpine的nginx镜像

docker run --rm nginx:alpine # 运行nginx服务,但会卡在界面中

docker run -d --rm nginx:alpine

docker ps # 查看当前运行的容器

docker kill # 关闭容器

后台运行nginx后,还不能访问端口,可以(1)

docker run --rm -d -P nginx:alpine #

此时PORTS显示 0.0.0.0:32768->80/tcp,表明物理机中的32768端口映射到了容器中的80端口,这种端口是随机绑定映射的

(2)第(1)种方法物理机端口随机,无法提供稳定的服务,因此需要重新指定端口

docker run --rm -d -p 8080:80 nginx:alpine

查看所有运行中的docker 容器id

docker ps -q

docker kill -$(docker ps -q) # 关闭所有运行中的容器

构建镜像 docker build

构建镜像之前需要先编写Dockerfile

docker官方文档中reference:

FROM: 指定基础镜像

RUN:

CMD: 指定容器启动时执行的命令

LABLE: 用于添加扩展信息到容器中

COPY:用于将文件拷贝到容器中

WORKDIR:设置工作目录

利用vi Dockerfile 进入编辑页面

FROM alpine (也可以使用ubuntu:16.04)

LABEL version = '1.0'

LABEL description = 'my first image'

RUN apk update && apk add python3 #(如果使用ubuntu系统,则RUN apt update && apt -y install python3)

COPY . /code # 将当前目录下的文件拷贝到code目录中。此方式下修改原来目录中的文件,运行容器时结果仍然不变

WORKDIR /code # 指定容器运行后的工作目录

CMD ['', ''] #

编辑完Dockerfile后

docker build -t myapp . # 在当前目录(.)中构建一个tag为myapp的镜像

docker inspect redis:alpine # 查看镜像

综合实战

python程序,将数据存放在redis中,并且

创建目录存放数据

mkdir /redis-data

docker run -d --name redis -v /redis-data:/data redis:alpine # 为容器指定一个名字 --name

创建python文件

mkdir myweb

cd myweb/

vi app.py

编辑app.py 文件

# 使用flask创建一个web服务

from flask import Flask

import redis

app = Flask(__name__)

# 连接redis

r = redis.Redis(host='redis', port=6379)

@app.route('/')

def hello():

count = r.incr('clicks')

return "ZSC love CS! {}".format(count)

if __name__ == '__main__':

app.run('0.0.0.0', port=5000)

编辑Dockerfile

FROM python:alpine # docker 提供了python镜像

COPY . /code

RUN pip install flask redis #不用使用pip3

WORKDIR /code

EXPOSE 5000 # 开放5000的端口

CMD ['python', 'app.py']

构建镜像

docker build -t myweb .

启动运行app

docker run --rm -d -p 80:5000 myweb

访问地址后,显示Internal Server Error,但是虽然80已经映射到了myweb容器的5000端口,而redis和pythonl两个容器之间是隔离的。

连接redis后启用镜像

docker run --rm --link redis -p 80:5000 myweb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值