shell入门14-多进程处理ping应用
2022-12-31 本文已影响0人
万州客
这不是简单的ping,而是结合了文件描述符,命名通道的多进程ping。
一,ping的高级版本
#!/bin/bash
# 多进程处理ping应用,结合命名管道和文件描述符,使用read,每次读一行
# 使用wait命令等待所有子进程结束后再退出脚本
# 控制进程数量
num=10
net="192.168.1"
pipefile="/tmp/multiping_$$.tmp"
multi_ping() {
echo "ping -c2 -i0.2 -W1 $1 &>/dev/null"
if [ $? -eq 0 ];then
echo "$1 is up."
else
echo "$1 is down."
fi
}
# 创建命名管道文件,创建其文件描述符,通过重定向将数据导入管道文件。
echo "创建命名管道"
mkfifo $pipefile
echo "创建12号文件描述符"
exec 12<>$pipefile
for i in `seq $num`
do
echo "这里写入10个空的内容,12号文件描述符,等待read命令读取"
echo "" >&12 &
done
# 通过循环反复调用函数将并其放入后台并执行
# 成功读取命名管道中的数据后开启新的进程
# 所有内容读取完成后read被阻塞,无法再启动新的进程
# 等待前面启动的所有进程结束后,继续往管道文件中写入数据,释放阻塞,开启新的进程
for j in {1..254}
do
echo "这里使用read -u12命令从12号文件描述符中读取"
read -u12
{
multi_ping $net.$j
echo "这里处理完multi_ping函数后,再次写入空的内容取12号文件描述符"
echo "" >&12
} &
done
#等待进程返回
wait
#删除管道文件
rm -rf $pipefile
二,,LNMP安装的脚本框架
#!/bin/bash
# 功能描述:一键部署LNMP环境
# 设置各种显示消息的颜色属性
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;34m"
SETCOLOR_NORMAL="echo -e \\033[0;39m"
# 测试YUM源是否可用,awk和sed都用上了。
test_yum() {
yum clean all &>/dev/null
num=$(yum repolist -e 0 | awk '/repolist/{print $2}' | sed 's/,//')
if [ $num -le 0 ]; then
$SETCOLOR_FAILURE
echo -n "[ERROR]: 没有YUM源"
$SETCOLOR_NORMAL
exit
fi
}
# 安装LNMP环境所需要的依赖包
intall_deps() {
yum install -y gcc pcre-devel openssl-devel cmake ncurses-devel
yum install -y gcc-c++ bison bison-devel
yum install -y libxml2 libxml2-devel curl curl-devel libjpeg libjpeg-devel
yum install -y freetype gd gd-devel
yum install -y freetype-devel libxslt libxslt-devel bzip2 bzip2-devel
yum install -y libpng libpng-devel
}
# 源码安装NGINX:创建帐户,激活模块,禁用模块
install_nginx() {
if ! id nginx &> /dev/null; then
useradd -s /sbin/nologin nginx
fi
# tar -zxvf nginx-1.4.2.tar.gz
# cd nginx-1.14.2
# ./configure
$SETCOLOR_WARNING
echo -n "正在统计nginx,请耐心等待..."
$SETCOLOR_NORMAL
# make &> /dev/null && make install &> /dev/null
# cd ..
# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
}
# 默认源码安装的软件没有service文件无法通过systemd管理
# 手动编写service文件,方便在CentOS的环境中进行管理服务
conf_nginx_systemd() {
echo "...此处使用cat命令生成/usr/lib/systemd/system/nginx.service文件.."
}
# 源码安装部署MYSQL8.0版本数据库软件
# 注意:需要提前到官司网下载带boost版本的mysql(mysql-boost-8.0.13.tar.gz)
install_mysql8() {
echo -n ".....此处源码安装mysql8........"
}
# 创建MYSQL配置文件(设置SOCKET文件,数据库目录,优化参数等)
init_mysql8() {
echo -n "...........创建MYSQL配置文件(设置SOCKET文件,数据库目录,优化参数等)............."
}
install_php7() {
echo -n "...........安装PHP7......."
}
# 调用执行函数,安装部署LNMP环境
test_yum
# install_deps
install_nginx
conf_nginx_systemd
install_mysql8
init_mysql8
install_php7