博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell实战训练营Day25
阅读量:5817 次
发布时间:2019-06-18

本文共 3641 字,大约阅读时间需要 12 分钟。

写一个脚本:

判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。
如果其生产商为AuthenticAMD,就显示其为AMD公司;
如果其生产商为GenuineIntel,就显示其为Intel公司;
否则,就说其为非主流公司。
#!/bin/bash
cpu=grep '^vendor_id' /proc/cpuinfo |head -1|awk -F ': ' '{print $2}'
#if [ $cpu == "AuthenticAMD" ]
#then
#echo "CPU厂商是AMD."
#elif [ $cpu == "GenuineIntel" ]
#then
#echo "CPU厂商是Intel."
#else# echo "CPU厂商是非主流厂商。"
#fi
case $cpu in
AuthenticAMD)
echo "CPU厂商是AMD."
;;

GenuineIntel)

echo "CPU厂商是Intel."
;;

*)

echo "CPU厂商是非主流厂商。"
;;
esac

用shell写一个监控服务器cpu使用率的监控脚本

#!/bin/bash
mail_user=xxx@xxx.com

m_mail() {

log=$1
t_s=date +%s
t_s2=date -d "1 hours ago" +%s
if [ ! -f /tmp/$log ]
then
#创建$log文件
touch /tmp/$log
#增加a权限,只允许追加内容,不允许更改或删除
chattr +a /tmp/$log
#第一次告警,可以直接写入1小时以前的时间戳
echo $t_s2 >> /tmp/$log
fi
#无论$log文件是否是刚刚创建,都需要查看最后一行的时间戳
t_s2=tail -1 /tmp/$log|awk '{print $1}'
#取出最后一行即上次告警的时间戳后,立即写入当前的时间戳
echo $t_s>>/tmp/$log
#取两次时间戳差值
v=$[$t_s-$t_s2]
#如果差值超过1800,立即发邮件
if [ $v -gt 1800 ]
then
#发邮件,其中$2为mail函数的第二个参数,这里为一个文件
python mail.py $mail_user "CPU使用率超过90%" "top -bn1" 2>/dev/null
#定义计数器临时文件,并写入0
echo "0" > /tmp/$log.count
else
#如果计数器临时文件不存在,需要创建并写入0
if [ ! -f /tmp/$log.count ]
then
echo "0" > /tmp/$log.count
fi
nu=cat /tmp/$log.count
#30分钟内每发生1次告警,计数器加1
nu2=$[$nu+1]
echo $nu2>/tmp/$log.count
#当告警次数超过30次,需要再次发邮件
if [ $nu2 -gt 30 ]
then
python mail.py $mail_user "CPU使用率超过90%持续30分钟了" "top -bn1" 2>/dev/null
#第二次告警后,将计数器再次从0开始
echo "0" > /tmp/$log.count
fi
fi
}

while :

do
cpu_i=top -bn1 |grep 'Cpu(s):'|sed 's/^%//'|awk -F ' +|%' '{print $8}'
cpu_u=echo 100-$cpu_i|bc

if [ $cpu_u -gt 90 ]then   m_mail cpufisleep 60

done

给出一个进程PID,打印出该进程下面的子进程以及子进程下面的所有子进程。(只需要考虑子进程的子进程,再往深层次则不考虑)

#!/bin/bash
ps -elf > /tmp/pid.txt
read -p "Please input a pid: " p

if [ -z "$p" ]

then
echo "你没有输入任何pid,请输入一个pid."
exit
fi

if ! grep -qw "$p" /tmp/pid.txt

then
echo "你输入的pid不存在."
exit
fi

get_cpid()

{
p1=$1
ps -elf |awk -v p2=$p1 '$5==p2 {print $4}' > /tmp/$p1.txt
n=wc -l /tmp/$p1.txt|awk '{print $1}'
if [ $n -eq 0 ]
then
echo "进程$1下没有子进程."
else
echo "进程$1下的子进程是:"
cat /tmp/$p1.txt
fi
}

get_cpid $p

for c_p in cat /tmp/$p.txt

do
get_cpid $c_p
done

需求背景: 服务器上,跑的lamp环境,上面有很多客户的项目,每个项目就是一个网站。 由于客户在不断增加,每次增加一个客户,就需要配置相应的mysql、ftp以及httpd。这种工作重复性非常强的,所以用脚本实现非常合适。mysql增加的是对应客户项目的数据库、用户、密码,ftp增加的是对应项目的用户、密码(使用vsftpd,虚拟用户模式),httpd就是要增加虚拟主机配置段。

#!/bin/bash

#mysql命令行登录root
mysqlc="/usr/local/mysql/bin/mysql -uroot -pjk1hYUcnt6"

#apache虚拟主机配置文件

httpd_config_f="/usr/local/apache2/conf/extra/httpd-vhosts.conf"

#定义增加MySQL库和用户的函数

add_mysql_user()
{
#生成随机密码
mysql_p=mkpasswd -s 0 -l 12

#将密码保存到临时文件里,这里的$pro为用户自定义的项目名字echo "$pro $mysql_p" >/tmp/$pro.txt#这里使用嵌入文档的形式(需顶格),将创建用户并授权的命令传递给mysql

$mysqlc <<EOF

create database $pro;
grant all on $pro.* to "$pro"@'127.0.0.1' identified by "$mysql_p";
#下面这个EOF必须要顶格
EOF
}

#定义增加FTP用户的函数

add_ftp_user()
{
ftp_p=mkpasswd -s 0 -l 12
echo "$pro" >> $ftpuserfile
echo "$ftp_p" >> $ftpuserfile

#将用户、密码文件转换为密码db文件db_load -T -t hash -f $ftpuserfile  /etc/vsftpd/vsftpd_login.dbcd $ftpudir#这里的aaa是一个文件,是之前的一个项目,可以作为配置模板cp aaa $pro #把里面的aaa改为新的项目名字sed -i "s/aaa/$pro/" $pro #重启vsftpd服务/etc/init.d/vsftpd restart

}

#定义增加apache虚拟主机的函数

config_httpd()
{
#增加网站根目录,和域名保持一致,这里的$dom为用户自定义的域名
mkdir $webdir/$dom

#将网站根目录属主和属组设置为ftp用户chown vsftpd:vsftpd $webdir/$dom#用嵌入文档(需顶格),把虚拟主机配置写入到配置文件里

cat >> $httpd_config_f <<EOF

<VirtualHost *:80>
DocumentRoot $webdir/$dom
ServerName $dom
<Directory $webdir/$dom>
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
EOF

#重载apache服务/usr/local/apache2/bin/apachectl graceful

}

read -p "input the project name: " pro

read -p "input the domain: " dom

add_mysql_user

add_ftp_user
config_httpd

转载于:https://blog.51cto.com/12948291/2345204

你可能感兴趣的文章
Leetcode-Database-176-Second Highest Salary-Easy(转)
查看>>
Lua中的元表与元方法
查看>>
Servlet&jsp基础:第三部分
查看>>
Ubuntu12.04LTS安装好后是空白桌面的解决步骤(更新显卡驱动)
查看>>
poj-3696 The Luckiest number
查看>>
[Dynamic Language] Python定时任务框架
查看>>
Furure的简单介绍和使用
查看>>
CSS3 网格布局(grid layout)基础知识 - 隐式网格自己主动布局(grid-auto-rows/grid-auto-columns/grid-auto-flow)...
查看>>
构建Docker Compose服务堆栈
查看>>
最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )
查看>>
CentOS7下zip解压和unzip压缩文件
查看>>
Hadoop生态圈-Kafka常用命令总结
查看>>
如何基于Redis Replication设计并实现Redis-replicator?
查看>>
Linux 环境下 PHP 扩展的编译与安装 以 mysqli 为例
查看>>
php防止会话固定攻击
查看>>
openmp在图像处理上面的运用
查看>>
Key Components and Internals of Spring Boot Framework--转
查看>>
基于Bootstrap的jQuery开关按钮插件
查看>>
修改linux文件权限命令:chmod
查看>>
如何删除PHP数组中的元素,并且索引重排(unset,array_splice)?
查看>>