当前位置: 首页 > news >正文

厦门企业网站seo建筑公司加盟分公司

厦门企业网站seo,建筑公司加盟分公司,创建论坛网站,高邮城乡建设局 网站1、每天写一个文件 (题目要求#xff09; 请按照这样的日期格式(xxxx-xx-xx每日生成一个文件 例如生成的文件为2017-12-20.log#xff0c;并且把磁盘的使用情况写到到这个文件中不用考虑cron#xff0c;仅仅写脚本即可 [核心要点] date命令用法 df命令 知识补充#xff1…1、每天写一个文件 (题目要求 ·请按照这样的日期格式(xxxx-xx-xx每日生成一个文件 ·例如生成的文件为2017-12-20.log并且把磁盘的使用情况写到到这个文件中·不用考虑cron仅仅写脚本即可 [核心要点] date命令用法 df命令 知识补充date #!/bin/bash datedate %F dir/root/shell/disklog if [ ! -d $dir ] then mkdir -p $dir fidf -h $dir/$date.logfind $dir/ -mtime 365 |xargs rm -rf2、根据日志统计访问量 2409:8c5b:ffff:2802::12|18/Sep/2023:14:54:58 0800]|GET /StorageWeb/servlet/GetFileByURLServlet?dmD950root/mnt/wfs210pt/db0/3cfileidL0db03c39ca7fe50189f50b7c5fdefbf59.m4atype3uiMTAwcG41ak4xMzg4ci0a0LLEGN1559034202309151704013v4cn157170120942023-09-...ct2time1695020117exp86400codeC8C83177ED3323F4868218945448B338B844839D2A270E2B718187A6538AB607ec1bucketNamehcy-dg-21 HTTP/1.1|0.137|200|507533|-|migu/mCloud10.2.1 (Linux;Android 8.0.0) ExoPlayerLib/2.11.4 2409:8c5b:ffff:2802::12|18/Sep/2023:14:55:00 0800]|GET /StorageWeb/servlet/GetFileByURLServlet?dmD950root/mnt/wfs210pt/cc6/65fileidL2cc665e6961e4596c9db5cedf98ab1e4b.m4atype3uiMTAwcG41ak4xMzg4ci0a0LLEGN1559070202309151703581docn182961930912023-09-...ct2time1695020117exp86400code5B417BF97BF91525AF08146323BB065D05559AE2FA68C645CD115BDC33CBCF4Bec1bucketNamehcy-dg-21 HTTP/1.1|0.090|200|1154259|-|migu/mCloud10.2.1 (Linux;Android 8.0.0) ExoPlayerLib/2.11.4 10.19.2.55|18/Sep/2023:14:55:19 0800]|GET /StorageWeb/servlet/GetFileByURLServlet?dmD953root/mnt/wfs203pt/7fd/24fileidLB7fd2451f123d64eb80416987e3a1e5b7.mp3type3uiMDEwSFVwNFIxNzU5ci010HUp4R175914520220323113403baicn%E9%83%91%E4%B8%AD%E5%9F%BA-%E6%A2%A6%E9%86%92%E6%97%B6%E5%88%86ct2time1695009524exp86400codeAF1B6990923437217D271AA102149FDF6EC9C58F56C057F7FB61FB77C6C4E317ec1 HTTP/1.1|0.049|206|1|-|mCloud_iPhone/09051207 CFNetwork/1390 Darwin/22.0.0统计出每个IP访问量有多少 核心要点 awk、sort、uniq命令 sudo cat /usr/local/c3ms/logs/access.log | awk -F | {print $1} | sort | uniq -c | sort -n -r | more 3、统计所有进程占内存之和 题目要求 写一个脚本计算一下linux系统所有进程占用内存大小的和。 核心要点 ps命令用法 for循环 加法运算 #!/bin/bash sum0 for n in ps -aux | grep -v COMMAND | awk {print $6} dosum$[$sum $n] done echo $sum4、检查机器存活 设计一个脚本监控远程的一台机器(假设ip为180.163.26.39)的存活状态并将主机是否通的信息打印到前台信息 #!/bin/bash IP$1 nping -c2 $IP | grep packets | awk -F % {print $1} | awk {print $NF} if [ $n -ge 50 ];then echo 该主机死机 elseecho 该主机通 fi 5、批量修改文件名称 1、找到/123目录下所有后缀名为.txt的文件1.批量修改txt为.txt.bak2、把所有bak文件打包压缩为123.tar.gz3.批量还原文件的名字即把增加的.bak再删除[核心要点] find用来查找所有.txt文件 tar打包一堆文件 还原文件名用for循环 #!/bin/bash #第一种写法 find /123 -type f -name *.txt /123/txt.list for f in cat /123/txt.list domv $f $f.bak done #第二种写法 #find /123 -type f -name *.txt | xargs -i mv {} {}.bak #find /123 -type f -name *.txt -exec mv {} {}.bak \;for f in cat /123/txt.list do echo $f.bak done /123/txt.bak.listtar -czvf 123.tar.gz cat /123/txt.bak.list | xargs 6、检查本地的80端口是否开启 题目要求 写一个脚本判断本机的80端口(假如服务为httpd)是否开启着如果开启着什么都不做如果发现端口不存在那么重启一下httpd服务并发邮件通知你自己。脚本写好后可以每一分钟执行一次也可以写一个死循环的脚本30s检测一次。 核心要点 检测80端口使用nmap-p 80 127.0.0.1或者netstat -ntplgrep -w 80 重启httpd服务的命令要知道 systemctl restart httpd 利用死循环 #!/bin/bash m10288226404qq.com while : donnetstat -ntulp | grep :80 | wc -lif [ $n -eq 0 ]then systemctl restart nginx # python main.py $m 80端口关闭已经将nginx进行重启操作 fisleep 20 done7 、 数据库备份 *题目要求 设计一个shell脚本来备份数据库首先在本地服务器上保存一份数据然后再远程拷贝份本地保存一周的数据远程保存一个月。假定我们知道mysqlroot账号的密码要备份的库为discuz本地备份目录为/bak/mysql,远程服务器ip为192.168.123.30远程提供了一个rsync服务备份的地址是192168.123.30:backup.写完脚本后需要加入到cron中每天凌晨3点执行。 核心要点 备份数据库的命令 同步到远程去的命令 命名规则 #!/bin/bash d1date %w d2date %dloca_bakdir/bak/mysgl remote_bakdir192.168.123.30::backupexec 1 /tmp/mysglbak.log 2/tmp/mysglbak.err echomysql bakcup begin at date mysqldump -uroot -pxxxx discz $local bakdir/discuz.sql.$d1 rsync -az $local_bakdir/discuz.sql.$dl $remote_bakdir/discuz.sql.$d2 echo mysql backup end at date 8、检查502状态码 背景 服务器上跑的是LNMP环境近期总是有502现象。502为网站访问的状态码200正常502错误是nginx最为普遍的借误状态码。由于502只是暂时的并且只要一重启php-fpm服务则502消失但不重启的话则会一直持续很长时间。所以有必要写一个监控脚本监控访问日志的状态码旦发生502则自动重启一下php-fpm。 我们设定: access log /data/log/access.log脚本死循环每10s检测一次(假设每10s钟的日志条数为300左右重启php-fpm的方法是 /etc/init.d/php-fpm restart 技术核心 使用curl检测状态码是否是502或者通过分析访问日志判断状态码的比率 重启php-fpm服务的命令。 #!/bin/bash log/data/log/access.log while : do 502_ntail -n 300 $log | grep -c 502/ if [ -z $502_n ] then exit fi if [ $502_n -gt 100 ] then /etc/init.d/php.fpm /dev/null 2/tmp/php.fpm.errfpm_p_npgrep -l php.fpm | wc -l if [ $fpm_p_n -eq 0 ]then python main.py xxxxx.com php.fpm重启失败 head -10 /tmp/php.fpm.errexit fi fi sleep 10 done9、删除文件中包含字母的行 背景 把一个文本文档的前5行中包含字母的行删除掉同时把6到10行中的全部字母删除掉。技术要求 使用sed #!/bin/bash sed -n 1,5p /opt/shell/9.txt | sed /[a-zA-Z]/d sed 1,5d /opt/shell/9.txt | sed 1,5s/[a-zA-Z]/g10、找单词 题目要求 用shell打印下面这句话中字母数小于6的单词。 Bash also interprets a number of multi-character options. [核心要点] for循环遍历所有单词 wc-l 获取字符串长度 for w in Bash also interprets a number of multi-character options. ; do echo $w ;done echo Bash also interprets a number of multi-character options. | awk -F [ -.] {print NF}#!/bin/bash cBash also interprets a number of multi-character options. necho $c | awk -F [ -.] {print NF} for ((il;i$n;i)) dolecho $c | awk -F [ -.] -v j$i {print $j}| wc -Lif [ $l -lt 6 ]thenecho $c | awk -F [ -.] -v j$i {print $j}fi done11、输入数字运行命令 [题目要求] 写一个脚本实现如下功能: 输入一个数字然后运行对应的一个命令显示命令如下: cmd meau* 1 - date 2 - ls 3 - who 4 - pwd当输入1时会运行date,输入2时运行ls,以此类推[核心要点] case判断 #/bin/bash echo *cmd meau** 1 - date 2 - ls 3 - who 4 - pwd read -p Please input a number: n if [ -z $n ] then echo 请输入一个1-4的数字 fi n1echo $n | sed s/[0-9]//g if [ -n $n1 ] then echo 请输入一个纯数字范围1-4 fi case $n in 1) date ;;2) ls ;;3)who;;4)pwd;;*) echo 请输入一个纯数字范围1-4;; esac12、批量创建用户 用shell脚本实现如下需求 添加user_00 – user_09 10个用户并且给他们设置一个随机密码密码要求10位包含大小写字母以及数字注意需要把每个用户的密码记录到一个日志文件里。 提示 随机密码使用命令 mkpasswd在脚本中给用户设置密码可以使用echo 然后管道passwd命令 核心要点 seq实现数字递增mkpasswd产生随机字符 1、 安装mkpasswd命令 yum -y install expect-5.45-14.el7_1.x86_64设置10个随机数字 mkpasswd -l 10 -s 0#!/bin/bash for i in seq -w 00 09 douseradd user_$ipmkpasswd -l 10 -s 0 echo user_$i $p /tmp/pass.tmpecho $p |passwd --stdin user_$i done13、监控apache 题目要求 在服务器上写一个监控脚本要求如下 每隔10s去检测一次服务器上的httpd进程数如果大于等于500的时候就需要自动重启一下apache服务并检测启动是否成功若没有正常启动还需再一次启动最大不成功数超过5次则需要立即发邮件通知管理员并且以后不需要再检测如果启动成功后1分钟后再次检测httpd进程数若正常则重复之前操作每隔10s检测一次若还是大于等于500那放弃重启并需要发邮件给管理员然后自动退出该脚本。假设其中发邮件脚本为之前使用的mail.py 核心要点 pgrep -l httpd或者ps -C httpd --no-heading检查进程for循环5次计数器 101 自动屏蔽攻击IP增强您的服务器安全性的有效策略 在当今的数字世界中服务器安全性成为了每个企业或个人都必须面对的重要议题。特别是当面对如DoS拒绝服务攻击等网络威胁时一个有效的防范措施显得尤为关键。本文将探讨如何通过自动屏蔽攻击IP来增强您的服务器抵御DoS攻击的能力并提供一个实用的Bash脚本作为参考。 理解DoS攻击 DoS攻击是一种恶意行为通过向目标服务器发送大量无用的请求耗尽其资源使合法用户无法访问服务。这种攻击不仅影响服务器的正常运行还可能导致数据丢失、系统崩溃等严重后果。 自动屏蔽攻击IP的策略 为了有效应对DoS攻击我们需要一个能够实时监控服务器流量并自动识别和屏蔽攻击IP的系统。以下是实现这一目标的基本步骤 1、监控服务器日志通过分析Nginx等服务器的访问日志我们可以识别出异常流量模式如短时间内来自同一IP的大量请求。 2、识别攻击IP使用脚本或工具对日志数据进行处理提取出那些行为异常的IP地址。 3、自动屏蔽一旦发现攻击IP立即使用iptables等防火墙工具将其加入黑名单阻止其进一步的访问。 4、记录和报告将屏蔽的IP地址和时间记录在日志文件中以便后续分析和报告。 #!/bin/bash # 定义日志文件路径和临时黑名单文件路径 LOG_FILE/usr/local/nginx/logs/demo2.access.log BLACKLIST_FILE/tmp/blacklist.txt DROP_LOG/tmp/drop_ip.log # 获取当前时间并格式化为日期 DATE$(date %d/%b/%Y:%H:%M) # 从日志文件中提取异常IP地址这里假设每分钟超过10个请求的IP为异常 tail -n 5000 $LOG_FILE | grep $DATE | awk {print $1, $4} | sort -n | uniq -c | awk $1 10 {print $2} $BLACKLIST_FILE # 读取黑名单文件并屏蔽这些IP地址 while IFS read -r IP; do if ! iptables -vnL INPUT | grep -q $IP; then iptables -I INPUT -s $IP -j DROP echo $(date %F_%T) $IP $DROP_LOG echo Blocked IP: $IP fi done $BLACKLIST_FILE # 可选清理过时的iptables规则避免规则过多导致性能下降 # 这里可以根据需要添加逻辑来定期清理旧的屏蔽规则脚本说明 脚本首先定义了所需的文件路径和日期格式。 使用tail和grep命令结合当前时间从Nginx访问日志中提取最近的访问记录。 通过awk和sort命令处理这些记录识别出每分钟请求次数超过10次的IP地址并将它们写入临时黑名单文件。 脚本接着读取黑名单文件中的每个IP地址并使用iptables命令将它们加入INPUT链的DROP目标中从而屏蔽这些IP的访问。同时将屏蔽操作记录在日志文件中。 最后您可以根据需要添加额外的逻辑来定期清理iptables中的旧规则以保持防火墙的性能。 请注意此脚本是一个基本示例可能需要根据您的服务器配置、日志格式和安全策略进行定制。在实际使用中还应考虑脚本的性能影响、错误处理和日志管理等方面的问题。 脚本2 #!/bin/bash log/data/nginx/access.log # function add_iptables() { while read line do ip$(echo $line | awk {print $2}) count$(echo $line | awk {print $1}) rule_count$(iptables -L -n | grep $ip | wc -l) if [ $count -gt 100 ] [ $rule_count -eq 0 ]; then iptables -I INPUT -s $ip -j DROP echo $ip is dropped /tmp/droplist.log fi done $log } function main() { add_iptables } main 脚本3 #!/bin/bash ################################################################################ #### #根据web访问日志封禁请求量异常的IP如IP在半小时后恢复正常则解除封禁 ################################################################################ #### logfile/data/log/access.log #显示一分钟前的小时和分钟 d1date -d -1 minute %H%M d2date %M ipt/sbin/iptables ips/tmp/ips.txt block() { #将一分钟前的日志全部过滤出来并提取IP以及统计访问次数 grep $d1: $logfile|awk {print $1}|sort -n|uniq -c|sort -n $ips #利用for循环将次数超过100的IP依次遍历出来并予以封禁 for i in awk $1100 {print $2} $ips do$ipt -I INPUT -p tcp --dport 80 -s $i -j REJECTecho date %F-%T $i /tmp/badip.logdone } unblock() { #将封禁后所产生的pkts数量小于10的IP依次遍历予以解封for a in $ipt -nvL INPUT --line-numbers |grep 0.0.0.0/0|awk $210 {print $1}|sort -nrdo$ipt -D INPUT $adone$ipt -Z } #当时间在00分以及30分时执行解封函数 if [ $d2 -eq 00 ] || [ $d2 -eq 30 ] then #要先解再封因为刚刚封禁时产生的pkts数量很少 unblock block else block fi101 监控网站的URL #!/bin/bash URL_LISTwww.baidu.com www.ctnrs.com www.der-matech.net.cn www.der-matech.com.cn www.der-matech.cn www.der-matech.top www.der-matech.org for URL in $URL_LIST; do FAIL_COUNT0 for ((i1;i3;i)); do curl -s --head http://$URL /dev/null HTTP_CODE$(curl -o /dev/null --connect-timeout 3 -s -w %{http_code}\n http://$URL) if [ $HTTP_CODE -eq 200 ]; then echo $URL OK break else echo $URL retry $FAIL_COUNT let FAIL_COUNT fi done if [ $FAIL_COUNT -eq 3 ]; then echo Warning: $URL Access failure! echo 网站$URL坏掉请及时处理 | mail -s $URL网站高危 1242253055qq.com fi done102 利用sshpass远程登陆主机并执行命令 #/bin/bash if [ -z $1 ]; thenecho usage: $0 commandexit 1 fi HOST_LIST_FILEhost_list.txt # 这个修改$1COMMAND$ ## 这个修改$2 for IP in $(awk /^[^#]/{print $1} $HOST_LIST_FILE); do USER$(awk -v I$IP I$1{print $2} $HOST_LIST_FILE)PASS$(awk -v I$IP I$1{print $3} $HOST_LIST_FILE)PORT$(awk -v I$IP I$1{print $4} $HOST_LIST_FILE)echo -----$IP------sshpass -p $PASS ssh -p $PORT $USER$IP $COMMAND done## 核心关键sshpass命令安装 # 源码包安装wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz tar xvzf sshpass-1.05.tar.gz cd sshpass-1.05.tar.gz ./configure make make install # yum安装 yum -y install sshpass1、脚本闭坑注意事项 第一次登陆需要手动输入密码保证对方服务有认证秘钥 如果是修改密码需要对过期的秘钥内容进行删除重新手动输入 2、脚本执行效果 103 你的网站守护神脚本,通过测试URL并返回码 #!/bin/bash URL_LISTwww.baidu.com www.ctnrs.com www.der-matech.net.cn www.der-matech.com.cn www.der-matech.cn www.der-matech.top www.der-matech.org for URL in $URL_LIST; do FAIL_COUNT0 for ((i1;i3;i)); do curl -s --head http://$URL /dev/null HTTP_CODE$(curl -o /dev/null --connect-timeout 3 -s -w %{http_code}\n http://$URL) if [ $HTTP_CODE -eq 200 ]; then echo $URL OK break else echo $URL retry $FAIL_COUNT let FAIL_COUNT fi done if [ $FAIL_COUNT -eq 3 ]; then echo Warning: $URL Access failure! echo 网站$URL坏掉请及时处理 | mail -s $URL网站高危 1242253055qq.com fi done首先它定义了一个包含多个网站URL的列表。然后对每个URL进行循环检测。对于每个网站脚本会尝试连接并获取HTTP状态码。如果状态码为200表示网站正常脚本会打印出“$URL OK”并继续检测下一个网站。如果状态码不是200则表示网站可能存在问题脚本会进行重试并记录失败次数。如果连续三次尝试都失败那么脚本会发送一封警告邮件通知你网站可能存在问题 104 使用shell脚本批量清理kubernetes集群中Evicted状态的pod 测试环境有一台宿主机出现了异常大量的异常日志导致宿主机的磁盘使用率超过了85%触发了上面的pod驱离策略该宿主机上的的pod处于Evicted状态。在清理了磁盘之后得手动处理掉这些Evicted状态的pod。 查看了下该状态的pod数目有50一条条的删除到猴年马月写个shell脚本批量处理下。 #!/bin/bash## 获取当前状态为Evicted的pod ## 并输出到一个临时文件内## 这是输出的文件按制表符tab键间隔 #kubectl get pods --all-namespaces | awk /Evicted/ {print $1 \t $2} evicted_pods.txt## 这是输出的文件按空格符间隔 kubectl get pods --all-namespaces | awk /Evicted/ {print $1 $2} evicted_pods.txt## 这是按空格示例截取文本解析成字段:命名空间和pod名 while IFS read -r namespace pod_name; do## 这是按制表符tab键示例截取文本解析成字段 #while IFS$\t read -r namespace pod_name; do## 验证命名空间和 Pod 名称是否存在if [[ ! -z $namespace ! -z $pod_name ]]; thenecho kubectl delete pod $pod_name -n $namespace:kubectl delete pod $pod_name -n $namespacefi done evicted_pods.txt## 可选是否清理临时文件 rm -f evicted_pods.txt105、nginx日志分割 #!/bin/bash# 源日志目录 logs_path/var/log/nginx# 备份日志目录 back_logs_path${logs_path}/$(date -d yesterday %F)# 创建备份目录以日期命名注意每天零点整切割开始记录新的一天的日志备份目录应该是昨天 mkdir -p ${back_logs_path}# 重命名旧日志名注意日期 cd ${logs_path} find . -type f |xargs -i mv {} {}.$(date -d yesterday %F) # 移动旧日志文件到该目录下 cd ${logs_path} find . -type f |xargs -i mv {} ${back_logs_path}# 重新生成新日志 kill -USR1 cat /var/run/nginx.pid106、k8s查看deployment的对应版本号 因版本发布总是需要查看对应的版本号编写脚本只需要在脚本后面添加对应的deployment名称输出对应的deployment名称和镜像版本。只需将结果发生给开发即可开发根据进行版本进行ci的构建 #!/bin/bashfor deployment_name in $ doimage_version$( sudo kubectl get deployment $deployment_name -n prod -ojsonpath{.spec.template.spec.containers[*].image} | awk -F / {print $NF})echo $deployment_name $image_version done#!/bin/bash 逐个处理传入的部署名称获取它们的镜像版本并打印出来。 参数: - 传入的所有参数预期为部署的名称。 返回值:无 for deployment_name in $ do# 获取指定部署的镜像版本-o输出格式是jsonimage_version$( sudo kubectl get deployment $deployment_name -n prod -ojsonpath{.spec.template.spec.containers[*].image} | awk -F / {print $NF})# 打印部署名称和对应的镜像版本echo Deployment: $deployment_name - Image Version: $image_version done使用while循环 ## 命令1 echo deploymnt名称1 deployment名称2 | tr \n | while read -r deployment_name; do image_version$(sudo kubectl get deployment $deployment_name -n prod -ojsonpath{.spec.template.spec.containers[*].image} | awk -F / {print $NF}); echo $deployment_name $deployment_name:$image_version; done## 命令2 echo deploymnt名称1 deployment名称2 | tr \n | while read -r deployment_name; do image_version$(sudo kubectl get deployment $deployment_name -n prod -ojsonpath{.spec.template.spec.containers[*].image} | awk -F / {print $NF}); printf %-20s %s\n $deployment_name $deployment_name:$image_version; done 脚本解析 # 该脚本段用于列出指定命名空间中特定部署的名称及其对应的镜像版本号。 # 它首先通过管道传递一个包含多个部署名称的字符串然后对每个部署名称进行处理 # 获取对应的镜像版本号并以部署名称和版本号的形式打印出来。echo album-saas-mq yun-album-migration album-saas-manage album-saas-job | tr \n | while read -r deployment_name; do# 获取指定部署的镜像版本号image_version$(sudo kubectl get deployment $deployment_name -n prod -ojsonpath{.spec.template.spec.containers[*].image} | awk -F / {print $NF})# 打印部署名称和对应的镜像版本号printf %-20s %s\n $deployment_name $deployment_name:$image_version done 107 k8s批量执行驱赶node节点 for IP in $ do node_name$(sudo kubectl get node -o wide | awk NR 2 {print $1 $6} | grep $IP | awk {print $1})kubectl get pod -A | grep $node_name kubectl drain $node_name --ignore-daemonsetsecho $IP is SchedulingDisabled done执行脚本 sh drain-node.sh 192.168.1.202 192.168.1.203 192.168.1.204 ## 输入主机列表自动将node进行驱赶 108 批量执行多个IP和端口的网络联通性测试 #!/bin/bash# 检查输入参数 if [ $# -ne 1 ]; thenecho Usage: $0 input_fileexit 1 fiinput_file$1# 检查输入文件是否存在 if [ ! -f $input_file ]; thenecho Input file not foundexit 1 fi# 遍历输入文件中的每行 while IFS read -r line; doip$(echo $line | awk {print $1})port$(echo $line | awk {print $2})# 使用 sudo traceroute 测试网络连通性echo -n Testing $ip:$port... result$(sudo traceroute -n -T $ip -p $port 21)if [[ $result *Hops* ]]; thenecho 网络可访问elseecho 网络不可访问fi done $input_file 脚本2 #!/bin/bash# 定义要测试的 IP 地址和端口列表 read -p 请输入要测试的IP地址: IP_LIST read -p 请输入要测试的端口: PORT_LIST IP_LIST($IP_LIST) PORT_LIST($PORT_LIST)# 循环遍历 IP 地址和端口列表 for ip in ${IP_LIST[]} dofor port in ${PORT_LIST[]}doecho Testing connectivity to $ip on port $portsudo traceroute -n -T $ip -p $portecho -----------------------------------------done done109 磁盘空间大小和Inode大小监控 1、磁盘空间大少 #!/bin/bash # 检查硬盘如果剩余空间超过80%则发送消息 # Tue Aug 2 09:45:56 CST 2016 PATH/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/bin export PATH for RemainingSpace in $(df -h | awk {print $5} | grep -v Use | sed -e s/[%]//g) do if [[ $RemainingSpace 80 ]];then echo -e $RemainingSpace echo -e $(df -h | grep $RemainingSpace) /service/script/.HarddiskWarning mail -s disk Warning wl /service/script/.HarddiskWarning fi done#!/bin/bash # 检查磁盘使用情况如果超过80%则发送警报 THRESHOLD80 df -h | awk -v threshold$THRESHOLD { if($50 threshold) print $0; } | while read output; doecho 磁盘使用警报: $output done#!/bin/bash # 检查磁盘空间如果根分区使用率超过80%则发送警告邮件 THRESHOLD80 EMAILadminexample.comdf -h | grep -q /dev/root if [ $? -eq 0 ]; thenUSAGE$(df -h | grep /dev/root | awk { print $5 } | sed s/%//g)if [ $USAGE -ge $THRESHOLD ]; thenecho 警告根分区使用率已达 $USAGE% | mail -s 磁盘空间警告 $EMAILfi fi3、INode大小监控 #!/bin/bash # 检查Inode如果空闲的Inode少于200则发送消息给wl # Tue Aug 2 10:21:29 CST 2016 PATH/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/bin export PATH # 循环检查每个文件系统的空闲Inode数量 for FreeInode in $(df -i | grep -v Filesystem | awk {print $4}) do # 如果空闲Inode少于200则执行以下操作 if [[ $FreeInode 200 ]];then # 将包含空闲Inode数量少于200的文件系统信息写入文件 echo -e $(df -i | grep $FreeInode) /service/script/.FreeInode # 发送警告邮件给wl邮件内容为包含空闲Inode数量少于200的文件系统信息 mail -s FreeInode Warning wl /service/script/.FreeInode fi done110 一键监控CPU轻松应对性能瓶颈 #!/bin/bash #Inspect CPU # 设置环境变量确保脚本可以正确找到所需的命令 PATH/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/bin export PATH TERMlinux export TERM # 使用top命令获取CPU的空闲率并去掉小数点及后面的数字只保留整数部分 CpuResult$(top -bn 1 | grep Cpu | awk {print $5} | sed s/\..*$//g) # 判断CPU的空闲率是否低于20%如果是则执行以下操作 if [[ $CpuResult 20 ]];then # 将警告信息写入文件 echo CPU WARNING : $CpuResult /service/script/.cpu_in.txt # 将top命令的输出追加到文件中以便后续分析 top -bn 1 /service/script./cpu_in.txt # 发送邮件警告 mail -s Inspect CPU wl /service/script/.cpu_in.txt fi111 一键监控多台服务器磁盘使用情况 #!/bin/bash # 设定磁盘使用率的最大阈值默认为80% FSMAX80 # 设定远程连接的用户名这里为root remote_userroot # 设定要监控的服务器IP地址列表替换(IP地址列表)为实际的IP地址多个IP之间用空格分隔 remote_ip(IP地址列表) # 初始化服务器IP地址的索引变量 ip_num0 # 循环遍历服务器IP地址列表 while [ $ip_num -le $(expr ${#remote_ip[]} - 1)] do # 初始化读取行数变量 read_num1 # 通过SSH远程连接到服务器并执行df -h命令获取磁盘使用情况结果重定向到临时文件 ssh $remote_user${remote_ip[$ip_num]} df -h /tmp/diskcheck_tmp # 使用grep, awk和sed命令解析磁盘使用情况提取出各分区的使用率并去除百分号结果重定向到另一个临时文件 grep ^/dev/* /tmp/diskcheck_tmp | awk {print $5} | sed s/\%//g /tmp/diskcheck_num_tmp # 循环读取磁盘使用率并进行判断 while [ $read_num -le $(wc -l /tmp/diskcheck_num_tmp) ] do # 提取某一行的磁盘使用率 size$(sed -n $read_nump /tmp/diskcheck_num_tmp) # 判断磁盘使用率是否超过阈值 if [ $size -gt $FSMAX ] then # 如果超过阈值则发送警报邮件此处代码有误稍后修正 fi # 提取对应的磁盘分区信息并追加到邮件内容中此处代码有误稍后修正 # ...省略部分代码 # 更新读取行数变量 read_num$(expr $read_num 1) done # 更新服务器IP地址的索引变量 ip_num$(expr $ip_num 1) done112 端口探测脚本 #!/bin/bash HOST$1 PORT22 25 80 8080 for PORT in $PORT; do if echo /dev/null /dev/tcp/$HOST/$PORT; then echo $PORT open else echo $PORT close fi doneif echo /dev/null /dev/tcp/ H O S T / HOST/ HOST/PORT; then … else … fi使用Bash的内置TCP/IP功能尝试连接指定主机的端口。如果连接成功即端口开放则输出“PORTopen”否则输出“PORT close”。 113 shell:将文件从当前服务器迁移到另一个服务器 #!/bin/bash filename$1 ip192.168.1.202 passwd1 expect EOF spawn scp $filename root$ip:/root #expect yes/no {send yes\n} expect password {send $passwd\n} expect eof EOF114 kubernetes中的yaml配置文件保持 #/bin/bash# # K8S_YAML_SHELL_DIR记录脚本和resources.txt存放位置移动是需要修改其值 # 一键备份K8s集群YAML文件脚本 # resources.txt文件编写需要备份资源 ## 定时任务示例 # 0 0 */1 * * /usr/bin/bash /a/k8s-yaml-all-bak/start.sh /a/k8s-yaml-all-bak/yaml_bak.logs 21 # 后台运行示例 # nohup /usr/bin/bash /a/k8s-yaml-all-bak/start.sh /a/k8s-yaml-all-bak/yaml_bak.logs 21 # 当前时间 DATEdate %Y-%m-%d--%H-%M-%S# 备份路径 K8S_YAML_BACKUP_DIR/opt/k8s_yaml_bak# 脚本存放目录 K8S_YAML_SHELL_DIR/a/k8s-yaml-all-bakif [ ! -d $K8S_YAML_BACKUP_DIR ];thenmkdir -p $K8S_YAML_BACKUP_DIR fi# 获取备份资源 if [ -f ${K8S_YAML_SHELL_DIR}/resources.txt ];thenRESOURCEScat ${K8S_YAML_SHELL_DIR}/resources.txt# 判断资源文件是否为空if [[ $RESOURCES ]]; thenecho ${DATE} ${K8S_YAML_SHELL_DIR}/resources.txt 文件为空请输入资源名称exit 1fi elseecho resources.txt文件,不存在!exit 1 fi# 每次备份单独创建一个家目录时间 mkdir -p ${K8S_YAML_BACKUP_DIR}/k8s-${DATE}# 获取家目录 GET_HOME_DIRls -l ${K8S_YAML_BACKUP_DIR} | tail -n 1 | awk {print $9}echo 备份路径$K8S_YAML_BACKUP_DIR/$GET_HOME_DIR# 获取k8s名称空间 NAMESPACEkubectl get ns | awk {print $1} | tail -n 2dump_yaml(){# 遍历NSfor NS in $NAMESPACE ;do# 创建NS备份目录mkdir -p ${K8S_YAML_BACKUP_DIR}/${GET_HOME_DIR}/${NS}# 过滤NS(kube-public、kube-system)if [[ $NS ! kube-public $NS ! kube-system $NS ! default $NS ! velero ]]; then# 遍历k8s资源for RESOURCE in $RESOURCES; do# 创建资源目录mkdir -p ${K8S_YAML_BACKUP_DIR}/${GET_HOME_DIR}/${NS}/${RESOURCE}# 遍历对应资源名称for RESOURCE_NAME in $(kubectl get $RESOURCE -n $NS | awk {print $1} | tail -n 2);doDATE_YAMLdate %Y-%m-%d--%H:%M:%Secho ${DATE_YAML} 导出YAML: ${NS} ${RESOURCE} ${RESOURCE_NAME} # 导出对应名称空间下对应资源的yamlkubectl get ${RESOURCE} ${RESOURCE_NAME} -n ${NS} -o yaml ${K8S_YAML_BACKUP_DIR}/${GET_HOME_DIR}/$NS/${RESOURCE}/${RESOURCE_NAME}.yamlecho donedonefidone }del_yaml(){for DIR_NAME in $(find $K8S_YAML_BACKUP_DIR -type d -mtime 7);doDATE_YAMLdate %Y-%m-%d--%H:%M:%Secho ${DATE_YAML} 删除$DIR_NAME ${K8S_YAML_SHELL_DIR}/del-yaml.logsrm -rf $DIR_NAME ${K8S_YAML_SHELL_DIR}/del-yaml.logsecho ${K8S_YAML_SHELL_DIR}/del-yaml.logsdone }dump_yaml del_yaml115 Shell脚本批量监控网站健康状态 #/bin/bash check_url() { HTTP_CODE$(curl -o /dev/null --connect-timeout 3 -s -w %{http_code} $1)if [ $HTTP_CODE -eq 200 ];thenecho $URL Access successfulcontinuefi}URL_LIST www.baidu.com www.qq.com https://hao.360.com for URL in $URL_LIST ; do check_url $URLcheck_url $URLcheck_url $URLecho $URL Access failure! done116、使用expect工具自动进行SSH连接自动远程登陆并发送命令 #!/bin/bash#!/bin/bash# 接收所有传入的参数作为需要远程执行的命令 COMMAND$*# 主机信息文件记录着每台主机的IP、用户名、端口和密码 HOST_INFOhost.info# 遍历host.info文件中的每一行提取IP地址 for IP in $(awk /^[^#]/{print $1} $HOST_INFO); do# 根据IP地址从host.info文件中提取对应的用户名USER$(awk -v ip$IP ip$1{print $2} $HOST_INFO)# 根据IP地址从host.info文件中提取对应的端口号PORT$(awk -v ip$IP ip$1{print $3} $HOST_INFO)# 根据IP地址从host.info文件中提取对应的密码PASS$(awk -v ip$IP ip$1{print $4} $HOST_INFO)# 使用expect工具自动进行SSH连接并发送命令expect -c spawn ssh -p $PORT $USER$IP ## spawn这个不是一个独立命令而是 expect 工具中的一个关键字。expect 是一个用于自动化交互式应用程序如 SSH、FTP、passwd 等的工具。spawn 关键字用于启动一个新的进程并与之交互。expect {\(yes/no)\ {send \yes\r\; exp_continue}\password:\ {send \$PASS\r\; exp_continue}\$USER*\ {send \$COMMAND\r exit\r\; exp_continue}}# 输出分隔线方便查看每台主机的执行结果echo ------------------- done 117、定时清理与统计日志文件的艺术 #!/bin/bash################################################################ # 每小时执行一次脚本任务计划当时间为0点或12点时将目标目录下的所有文件内容清空 # 但不删除文件其他时间则只统计各个文件的大小一个文件一行输出到以时间和日期命名的文件中 # 需要考虑目标目录下二级、三级等子目录的文件 ################################################################# 定义日志文件以小时和日期命名 logfile/tmp/date %H-%F.log# 获取当前小时数 ndate %H# 判断当前时间是否为0点或12点 if [ $n -eq 00 ] || [ $n -eq 12 ] then# 如果是0点或12点则遍历目标目录下的所有文件并清空文件内容for i in find /data/log/ -type fdotrue $idone else# 如果不是0点或12点则遍历目标目录下的所有文件并统计文件大小输出到日志文件for i in find /data/log/ -type fdodu -sh $i $logfiledone fi####################################################################### # 使用 chmod x log_manage.sh 命令为脚本文件赋予执行权限。 # 使用 crontab -e 命令编辑 crontab 文件添加一行定时任务## 每小时执行一次脚本 # 0 * * * * /path/to/log_manage.sh ### 每半个小时执行一次脚本 # 0,30 * * * * /path/to/log_manage.sh ########################################################################118、查看所有用户的定时任务 sudo bash -c for user in $(cut -f1 -d: /etc/passwd); do echo $user ; crontab -l -u $user 2/dev/null; done119、自动备份脚本 这个脚本创建了重要目录的自动备份确保数据始终受到保护。 #!/bin/bash # 备份一个目录并将其存储在带有时间戳的备份文件夹中 SOURCE/path/to/important/data DEST/path/to/backup/location TIMESTAMP$(date %Y%m%d%H%M%S)tar -czvf $DEST/backup_$TIMESTAMP.tar.gz $SOURCE echo 备份完成: $DEST/backup_$TIMESTAMP.tar.gz 120、日志轮转 日志可能会变得很大并占用宝贵的磁盘空间。此脚本会循环并压缩日志文件。 #!/bin/bash # 轮转并压缩日志 LOG_FILE/path/to/logfile.log BACKUP_DIR/path/to/log/backup TIMESTAMP$(date %Y%m%d)mv $LOG_FILE $BACKUP_DIR/log_$TIMESTAMP.log gzip $BACKUP_DIR/log_$TIMESTAMP.log touch $LOG_FILE echo 日志轮转完成。
http://www.lakalapos1.cn/news/42276/

相关文章:

  • 北京网站设计案例网站素材网站
  • 上海企业网站营销电话免费咨询海报
  • 邢台网站制作那家便宜凡客诚品首页html
  • 聊城做网站推广地方北京大兴区网站建设
  • 商业网站建设试题郴州建设工程建设信息网站
  • 网站的构成宁波网页设计的技术要求
  • 网站动态标签扬中网站设计公司
  • 关于做网站策划书系统管理在哪里找怎么找
  • 东莞市网络策划推广哪家好seo百度快速排名
  • 东莞高埗做网站哪个公司好28商机网创业项目
  • 虚拟机做的网站怎么让外网访问不了网wordpress 关闭网站
  • 用dedecms织梦做中英文网站佛山seo培训机构
  • 傻瓜式大型网站开发工具wordpress拖拽插件
  • 福田网站建设团队wifi网络服务商电话
  • fullpage wow做的网站普陀做网站
  • wordpress与cmsseo研究协会网
  • 网站移动端是什么问题精细化工网站建设
  • 承德市网站建设网站开发的阶段流程图
  • 适合大学生做的网站网站描述怎么修改吗
  • 网站建设有几块顺天亿建设网站
  • 在哪个平台做网站好商家做网站的优点
  • 怎么联系网站开发团队网站备案证明
  • 建网站需要哪些步骤建网站找汉狮
  • 网站一般宽度做暧昧在线网站
  • 北京网站制作公司兴田德润可以不学校官网的网址
  • 查流量网站暴雪时分小说原著
  • 十堰做网站的公司富源县建设局的网站是什么
  • 营销网站html江小白发展过程中采用了哪些网络营销方式
  • 免费的logo网站精品资源共享课网站建设 碧辉腾乐
  • 网站建设 资质网站建设兼职劳务协议书