一个Linux主机巡检脚本

功能:

        对Linux主机的物理资源消耗进行监测和统计,对运行在本机上的服务进程进行监测和统计,列出本机上的账户有效期

使用场景:

       在没有 Promethes、zabbix、夜莺等监控工具的条件下,通过 crontab 排程应用本程序完成对主机上的关键信息的采集和输出,一遍分析当前主机的物理资源与业务程序的运行状态。

**************************************************************************************************************

#!/bin/bash
echo "################################################### README INFO ##############################################################"
echo "### Purpose: Carrying Out A Routine Inspection & Monitoring the Program Running-Status and the Consumed Hardware Resource  ###"
echo "### Made By: PomanTeng                                                                                                     ###"
echo "### E-mail: denggongmengbo@gmail.com                                                                                       ###"
echo "### WeChat: 1807479153                                                                                                     ###"
echo "### Version Identification Number:V2.1.0                                                                                   ###"
echo "### Procedure Identification Number:20230916                                                                               ###"
echo "##############################################################################################################################"

# Check the current OS user

[[ $(id -u) -gt 0 ]] && echo "请用root用户执行此脚本!" && exit 1

source /etc/profile

source ~/.bash_profile

echo "     "
echo -e "现在时刻 :\n \n $(date)"
echo "     "

echo "     "
echo "当前OS及其依托的基础设备类型 :"
echo "     "
cat /etc/*release* | awk '/release/' | uniq
echo "     "
hostnamectl | awk '/Chassis|Virtualization/'
echo "     "

# Defining the Manufacturer-Variables

manufacturer=$(dmidecode -s system-manufacturer)

productName=$(dmidecode -s system-product-name)

productSN=$(dmidecode -s system-serial-number)

biosVendor=$(dmidecode -s bios-vendor)

biosVersion=$(dmidecode -s bios-version)

cpuSpecification=$(dmidecode -s processor-version | uniq)

# Defining Variable "sysversion"


sysversion=$(cat /etc/*release* | grep "release" | uniq)

# Defining the Metric-Variables

cpuTop50=$(ps -aux | head -n 1 | awk -F " " -v OFS='     ' '{print $2,$3,$11}' ; ps -aux | sort -k3nr | head -n 50 | awk -F " " -v OFS='     ' '{print $2,$3,$11}')

memTop50=$(ps -aux | head -n 1 | awk -F " " -v OFS='     ' '{print $2,$4,$11}' ; ps -aux | sort -k4nr | head -n 50 | awk -F " " -v OFS='     ' '{print $2,$4,$11}')

cpuConsumedTotal=`ps -aux | head -n 1 | awk -F " " '{print $3}' ; ps -aux | awk '{sum+=$3}END{print sum}'`

rootUsed=$(df | awk '$NF=="/" {var=$3}END{print var/1024/1024" GB"}')

rootRemain=$(df | awk '$NF=="/" {var=$4}END{print var/1024/1024" GB"}')

rootPercent=$(df | awk '$NF=="/" {print $5}')

dataUsed=$(df | awk '$NF=="/app" {var=$3}END{print var/1024/1024" GB"}')

dataRemain=$(df | awk '$NF=="/app" {var=$4}END{print var/1024/1024" GB"}')

dataPercent=$(df | awk '$NF=="/app" {print $5}')

bondRX=$(ifconfig | grep -A 8 "bond1" | grep "RX packets")

bondTX=$(ifconfig | grep -A 8 "bond1" | grep "TX packets")

sysLoad=$(top | head -n 5)

vmstatLoad=$(vmstat -wt)

memUsed=$(free -h | awk -F " " '{print $3}' | awk -F " " 'NR==2')

memRemain=$(free -h | awk -F " " '{print $7}' | awk -F " " 'NR==2')

swapUsed=$(free -h | awk -F " " '{print $3}' | awk -F " " 'NR==3')

swapRemain=$(free -h | awk -F " " '{print $4}' | awk -F " " 'NR==3')

localIP=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' | awk 'NR==1')


listeningPortProgram=$(netstat -tlunp | awk -F " " 'NR == 1 {next} {print $0}')

portList=$(netstat -tlunp -e | awk -F " " 'NR==1 {next} {print $0}' | awk -F " " '{print $4}' | awk -F ":" '{print $NF}')


netstat -tlunp -e | awk -F " " 'NR==1 {next} {print $0}' | awk -F " " '{print $4}' | awk -F ":" '{print $NF}' | awk -F " " 'NR==1 {next} {print $0}' > ./portList.txt

# Defining the Function "get_Port-Program" to get the port and the corresponding program

get_Port_Program(){

                    cat ./portList.txt | while read lines

                                           do
                                                for var in "$lines"
                                                    do
                                                         echo "&&&&& Separator BEGIN &&&&&"

                                                         echo -e "Current Port is : " $var
                                                         
                                                        
                                                         echo -e "PID and Program is : " pwdx $(lsof -i:$var | awk '/LISTEN?/' | awk -F " " '{print $2}' | uniq)

                                                         echo "&&&&& Separator END &&&&&"
                                                       
                                                    done
                                             done

}

####################################################################################################################################################################################################

# Defining the Function "excute_Main" to get the Routine Inspection-Result

excute_Main(){

    cat << EOF

设备制造商:
    ${manufacturer}

设备供货型号:
    ${productName}

设备供货序列号:
    ${productSN}

BIOS制造商:
    ${biosVendor}

BIOS版本号:
    ${biosVersion}

板载CPU规格:
    ${cpuSpecification}

操作系统版本:
    ${sysversion}

当前主机的 Local IP:
    ${localIP}

CPU消耗总计:
    ${cpuConsumedTotal}

CPU消耗前50的程序:
    ${cpuTop50}

内存消耗前50的程序:
    ${memTop50}

内存消耗使用量:
    ${memUsed}

内存消耗剩余量:
    ${memRemain}

交换空间消耗使用量:
    ${swapUsed}

交换空间消耗剩余量:
    ${swapRemain}

根分区的使用量:
    ${rootUsed}

根分区的剩余量:
    ${rootRemain}

根分区的使用百分比:
    ${rootPercent}

数据分区的使用量:
    ${dataUsed}

数据分区的剩余量:
    ${dataRemain}

数据分区的使用百分比:
    ${dataPercent}

Bond接收的数据量:
    ${bondRX}

Bond发送的数据量:
    ${bondTX}

操作系统负载:
    ${sysLoad}

    &&&&& Separator &&&&&

    ${vmstatLoad}

正在监听的服务:
    ${listeningPortProgram}

EOF

}

#########################################################################################################################################

# Execute Functions

excute_Main

rm -rf ./portList.txt

############################################################################################################################################

echo "***** 本机运行的业务程序 *****"
echo "     "

echo -e "`ps -ef | grep "tiance" | grep -v "grep" | awk '{ for(i=1; i<=7; i++){ $i="" }; print NR $0 }'`"
echo "     "

echo "***** 本机业务程序的端口状态 *****"
echo "     "

echo -e "$(ss -tlunp | grep "tiance"  | grep -v "grep" | awk -F " " '{print NR $5,$7}')"
echo "     "

####################################################################################################################################################

echo "***** 系统用户失效日期 *****"

echo "     "

cat /etc/passwd | awk -F ":" '{print $1}' | while read line; do echo "$line" && chage -l $line | grep "Password expires" --color=always ;done

echo "     "

exit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Training versus Testing】Positive intervals

GPT的解释&#xff1a; 这段话解释了在一维中&#xff0c;针对 "Positive intervals"&#xff08;正间隔&#xff09;假设类别 H 的成长函数 mq(N) 的计算方式&#xff0c;以及如何得出这个成长函数。 1. "Positive intervals" 指的是一维情境中的假设&a…

Maven导入和引用本地包的方法

maven项目中使用到了TrendDB_API.jar包&#xff0c;项目是直接导入的jar包而没用用maven的形式导入&#xff0c;导致在idea编辑时无法识别本地jar包&#xff0c;最后我采用的是用maven方式导入下本地jar包。 <dependency><groupId>TrendDB_API</groupId><…

clickhouse在执行alter table update delete等命令后数据没有更新

clickhouse之删除数据或更新数据无效的解决思路 例如&#xff1a; ALTER TABLE 表名 DELETE WHERE 条件 ALTER TABLE 表名 UPDATE column1 expr1 [, ...] WHERE filter_expr分析原因&#xff1a; 我们都知道ClickHouse内核中的MergeTree存储一旦生成一个Data Part&#xff0…

推荐书目:Python从入门到精通(文末送书)

目录 编辑推荐 内容简介 作者简介 前言/序言 本书特点 编辑推荐 “软件开发视频大讲堂”丛书是清华社计算机专业基础类零售图书畅销品牌之一。 &#xff08;1&#xff09;2008—2023年&#xff0c;丛书累计修订7次&#xff0c;销售400万册&#xff0c;深受广大程序员喜爱。…

Spring安全配置: 构建安全稳固的Java应用

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

2023国赛B题:多波束测线问题 评阅要点完整分析

本文所有分析仅代表个人观点&#xff0c;不代表官方&#xff0c;仅供参考 制作人&#xff1a;川川徒弟 demoo CSDN&#xff1a;川川菜鸟公众号&#xff1a;川川带你学AI 全文采用非编程做法  需要工具&#xff1a; geogebra、matlab工具箱   注&#xff1a; 本文全文不考虑…

前端Layui框架介绍

当涉及到前端UI框架时&#xff0c;Layui&#xff08;简称layui&#xff09;是一个备受欢迎的框架之一。在这篇博客中&#xff0c;我们将深入了解layui&#xff0c;包括其市场占有率、开发语言、使用场景、框架特点以及一些使用案例。 1. 市场占有率 Layui 是一款流行的前端UI框…

3.4 设置环境变量MAKEFILES

一、MAKEFILES简介 MAKEFILES是一个环境变量&#xff0c;可以用来指定额外的makefile文件列表。当设置了MAKEFILES环境变量后&#xff0c;make命令会在其他makefile文件之前读取这些指定的makefile文件。 使用MAKEFILES类似于使用include指令&#xff0c;可以在多个目录中搜索…

Mysql

视频链接 黑马Mysql 基础篇 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控…

网络原理,了解xml, json,protobuffer的特点

目录 外卖服务器场景带入 大佬们通用的规范格式 一、&#x1f466; 外卖服务器场景 外面服务器沟通有很多模式——展示商家列表等等&#xff0c;只是其中一个&#xff0c;因此需要一个统一的规划了——不同应用程序&#xff0c;里面的自定义格式是不一样的&#xff0c;这样的…

icmp报文及用go实现

目录 一、概述 二、ICMP报文格式详解 2.1 什么是ICMP 2.2 ICMP报文格式 2.3 ICMP报文类型 2.4 实际报文举例 三、使用go实现icmp请求以及接收响应内容 一、概述 本文主要旨在学习icmp报文格式&#xff0c;以及通过go语言来实现ICMP发包。 二、ICMP报文格式详解 2.1 什…

练习:使用servlet显示试卷页面

试卷页面代码 在浏览器输入如下地址&#xff1a; http://localhost/examPageServlet 效果如下&#xff1a;

SV-6002T-P 网络对讲求助终端,立柱式智慧城市网络对讲求助终端,停车场出入口一键求助终端

SV-6002T-P 网络对讲求助终端&#xff0c;立柱式智慧城市网络对讲求助终端&#xff0c;停车场出入口一键求助终端 描述&#xff1a;SV-6002T是深圳锐科达电子有限公司的一款新型立柱型室外防水一键求助对讲终端&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数…

mysql的约束

文章目录 一、主键约束二、主键约束自增三、联合主键四、外键约束五、非空约束六、唯一约束七、默认约束八、检查约束 一、主键约束 作用&#xff1a;保证主键的值唯一且非空1张表只能创建1个主键格式 -- 创建表时添加 create table t1 (id int primary key );-- 创建表之后添…

基于Java+freemarker实现动态赋值以及生成Word文档

前言 有一个需求就是给定一个正确格式的 Word 文档模板&#xff0c;要求通过动态赋值方式&#xff0c;写入数据并新生成 该模板格式的 Word 文档。这很明显使用 Javafreemarker 方式来实现颇为简单。 一、导入依赖 <!-- freemarker --> <dependency><groupId…

Qt点亮I.MX6U开发板的一个LED

本篇开始将会介绍与开发版相关的Qt项目&#xff0c;首先从点亮一个LED开始。I.MX6U和STM32MP157的相关信息都会用到&#xff0c;但是后期还是将I.MX6U的学习作为重点。当然其他开发版的开发也可以参考本博文。 文章目录 1. Qt是如何操控开发板上的一个LED2. 出厂内核设备树中注…

Spring-Cloud GateWay+Vue 跨域方案汇总

文章目录 一、简介背景和概述 二、前端跨域解决方案Axios跨域CORS跨域 三、后端跨域解决方案反向代理服务器 四、Spring Cloud中的跨域解决方案Gateway网关的跨域配置 五、基于Vue和Spring Cloud的跨域整合实践**这两种配置只需配置一种即可生效&#xff08;前端or后端&#xf…

CPU的三级缓存

CPU缓存&#xff08;Cache Memory&#xff09;是位于CPU与内存之间的临时存储器&#xff0c;它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾&#xff0c;因为CPU运算速度要比内存读写速度快很多&#…

使用Python CV2融合人脸到新图片--优化版

优化说明 上一版本人脸跟奥特曼图片合并后边界感很严重&#xff0c;于是查找资料发现CV2还有一个泊松函数很适合融合图像。具体代码如下&#xff1a; import numpy as np import cv2usrFilePath "newpic22.jpg" atmFilePath "atm2.jpg" src cv2.imrea…

Gmail邮箱注册情况及最新动态

在中国大陆地区&#xff0c;对于是否可以注册Gmail邮箱一直存在一定的限制和讨论。准确来说&#xff0c;中国大陆地区的用户目前无法直接访问和注册Gmail邮箱。由于某些政策和技术原因&#xff0c;中国政府对于一些外国的网站和服务实施了网络封锁与限制。因此&#xff0c;中国…