实验一:Nginx服务管理脚本
请准备一台服务器,在服务器上使用源码安装nginx,成功启动并访问到nginx
为更方便的启动或者停止 nginx,请请根据要求,编写脚本实现如下的功能:
1.定义启动Nginx函数,
要求:
函数中需要判断nginx 的pid文件是否存在,若存在则提示: Nginx已经启动…若Nginx未启动,则执行检测配置文件,检测通过后执行启动nginx
启动后判断nginx的pid文件是否创建成功,若创建成功,则提示nginx启动成功!否则提示nginx启动失败
2.定义关闭 Nginx函数,
要求:
可以正确通过pid文件判断nginx服务是否已经停止,若已停止,则提示:nginx已经停止…
nginx在停止后判断pid文件是否已经成功被删除,若成功删除则提示: nginx停止成功
3.定义重新载入 Nginx函数
4.判断用户的传递的参数,可以实现:start、stop、restart、reload和其他的参数判断,
传递对应的参数,实现对应的功能,若传递错误的参数,则提示用户使用方法:Usage: nginx {start]stop/lrestartlreload}
#!/bin/bash
install_nginx(){
groupadd www
useradd -s /sbin/nologin -g www www
yum install gcc-c++ pcre pcre-devel zlib zlib-devel
cd /usr/local/src
tar zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --user=www --group=www --prefix=/usr/local/nginx
make && make install
}
start_nginx(){
netstat -lptnu|grep 80
if [ $? -eq 0 ]; then
echo "nginx 已经正常运行了"
else
/usr/local/nginx/sbin/nginx
fi
}
stop_nginx(){
pgrep nginx
if [ $? -eq 0 ]; then
echo "开始停止服务...."
pkill nginx
fi
}
reload_nginx(){
/usr/local/nginx/sbin/nginx -s reload
}
while :
do
read -p "请输入您想要执行的操作:<<" cmd
case $cmd in
start)
start_nginx
;;
stop)
stop_nginx
;;
restart)
stop_nginx
start_nginx
;;
reload)
reload_nginx
;;
quit)
exit
;;
*)
echo "使用方法:Usage: nginx {start|stop|restart|reload}"
;;
esac
done
实验二:批量创建系统用户脚本
请开发脚本实现如下功能,所有功能都需要执行脚本验证:1.通过交互获取需要创建用户的数量
2.用户创建之前要判断用户是否已经存在,若用户已经存在则跳过
3.在创建用户的同时为用户设置密码,密码为随机字符串,不得少于8位
4.最后在创建完毕后需要有提示:成功创建多少个用户,创建失败有多少用户
5.所有创建成功的用户名和密码要保存在:userlist文件中!
#!/bin/bash
read -p "请输入您想要创建的用户数:<<" num
for((i=1;i<=$num;i++))
do
id hehe$i
if [ $? -eq 0 ]; then
echo "hehe$i 已经存在"
else
let sum++
pwd=$(openssl rand -hex 4)
useradd hehe$i;echo "$pwd"|passwd --stdin hehe$i
echo "成功创建了$sum个用户"
fi
grep -w "hehe$i" /tmp/uselist
if [ $? -ne 0 ]; then
echo "hehe$i $pwd" >> /tmp/uselist
fi
done
cat /tmp/uselist
实验三:MySQL备份+异地备份脚本
请开发脚本实现如下功能:所有功能都需要执行脚本验证
准备两台服务器,一台为数据库服务器,一台为异地备份服务器
1.通过端口是否监听判断MySQL 服务是否在运行,若未运行,输出提示并退出脚本!若正在运行输出MySQL运行正常
2.通过传参获取需要备份的数据库,将所有获得的参数保存在数组:dblist中
3.使用循环遍历数组dblist,将数据库备份在/home/backup目录下,备份的文件需要压缩,文件名需要添加时间戳
4.备份过程需要判断数据库是否备份成功!若未备份成功需要发送邮件通知管理员
5.将每天备份成功的文件使用scp传输到异地备份服务器的:/opt/mysql_databases_backup目录下!
6.在使用scp 发送文件过程中产生的交互,需要使用expect来自动完成
7.添加计划任务,脚本每天的凌晨两点执行
#!/bin/bash
date=$(date "+%Y-%m-%d")
#验证服务是否正常运行
netstat -lptnu|grep 3306 >/dev/null
if [ $? -eq 0 ]; then
echo "mysql 正在运行"
else
echo "mysql 未运行"
exit
fi
#输出当前所有的db
cur_db=$(mysql -e "show databases;"|sed '1d')
echo "当前存在的db包括:${cur_db}"
#获取标准输入的值
read -p "需要备份的数据库:<<" db
#创建备份目录
if [ ! -d /home/backup/ ]; then
mkdir -p /home/backup/
fi
#遍历
dblist=($db)
for db in ${dblist[@]}
do
mysqldump -ubackup -p123 -h 192.168.10.130 -B $db --skip-lock-tables > /home/backup/$db.sql
cd /home/backup/
tar zcvf $date.$db.tar.gz $db.sql
#验证备份文件
find /home/backup -name $date.$db.tar.gz > /dev/null
if [ $? -eq 0 ]; then
echo "$date.$db.tar.gz 备份成功"
echo "mysql备份成功了!!"|mail -s "mysql 备份" 34704286@qq.com
else
echo "mysql备份失败!!"|mail -s "mysql 备份" 34704286@qq.com
fi
done
#scp远程备份
/usr/bin/expect <<eof spawn scp /home/backup/$date.$db.tar.gz 192.168.10.131:/opt/mysql_databases_backup expect "password" send "123456\n" expect eof eof