建设工作站服务器
方法总结:
1 .命令等待方式
2 .管道fifo
1.1
例1.1 :使用command wait将需要多进程运行的所有程序块转移到后台运行即可。
在“{}”中将主运行程序组成一个块,在中放入后台,四次运行全部放入后台后,
使用一个wait命令,您需要等待所有后台进程的执行完成
否则,系统不会等待。 继续直接执行后续命令,直到整个程序结束。
#! /bin/bash
start=`date &; #039; %s&; #039; `
for ( ) I=0; i10; I ) )
do
{
echo &; #039; success ! &; #039;
第三季
} #在后台运行上述程序块
唐
wait #等待上述程序结束
end=`date &; #039; %s&; #039; `
Echo&; #039; time:&; #039; ` expr $ end$ start `
2.1
实例2.1 :
#! /bin/sh
function a_sub {
休眠2;
endtime=`date %s `
sumtime=$[$endtime-$starttime]
echo&; #039; 我在whl上,整个脚本已经$sumtime秒&; #039; 正在执行
}
开始时间=` date % s `
导出开始时间
tmp_fifofile=&; #039; /tmp/$$.fifo&; #039; ##其中$$是进程的pid
mkfifo $tmp_fifofile ##创建命名管道
exec 6$tmp_fifofile ##绑定文件描述符6和FIFO
可以通过绑定rm -f $tmp_fifofile ##来删除文件
thread=30 ##
并发行数为30,控制用此数字一次发送的请求数
for ( ) I=0; i$thread; I ) );
do
echo 6 ##管道文件的读取是逐行进行的,因此在管道中写入空行
唐
while read dat
do
#读取管道中的一行,每读取一次,管道就会减少一行
读- 6
{ a_sub || {echo &; #039; a_sub is failed&; #039; }
echo $dat
每次执行a_sub函数时,echo 6 ##都会添加一个空行,以允许下一个过程继续
}
donedata.txt
wait ##此处的wait意味着您必须等待所有上述操作(包括后台进程)完成,然后再继续下一步。
exec 6- ##关闭文件描述符6写入
exec 6-
示例2 :多线程备份数据库
#! /bin/bash
hour=`date %H `
day=`date %F `
now=`date %F_%H `
all_dbs=&; #039; no&; #039;
passwd=&; #039; mysql_pass&; #039;
sshpass=&; #039; ssh_pass&; #039;
dbs=&; #039; db1 db2 db3 dbx dby dbz&; #039;
CPU _ num=` cat/proc/CPU info|grep processor|WC-l `
p_fifo=&; #039; /tmp/$$.pipo&; #039;
mkfifo $p_fifo
exec 111$p_fifo #相关文件描述符和管道
rm -f $p_fifo
trap &; #039; exec 111-; exec 111-; exit 0&; #039; 2
for ( ) I=1; i=$cpu_num; I ) )
do
定义echo 111 #进程队列的大小和cpu内核数
唐
函数备份( )
{
if [ $all_dbs==&; #039; no&; #039; ]; then
for db in $dbs
do
read -u111 #从队列中检索消息,并将队列中的消息数减少1
{
dbname=`echo $db|sed &; #039; s/-/@002d/g `
ops=&; #039; parallel=5compress-threads=5databases=$ dbname & amp; #039;
Bpath=&; #039;/data1/EHR-MySQL-backup/$ { day }/$ { db } & amp; #039;
在备份
速度10
将消息添加到echo 111 #队列并保留队列中的消息数(进程数)
} #在后台处理代码块
唐
wait #等待所有后台进程处理
关闭exec 111- #描述符,编写关闭
关闭exec 111- #描述符,关闭阅读
else
OPS=&; #039; parallel=5compress-threads=5& amp; #039;
Bpath=&; #039;/data1/EHR-MySQL-backup/$ { day } & amp; #039;
在备份
fi
}
backup ( )
{
if [-f $ { bpath }/lsn _ $ { last }/xtra backup _ check points ]; then
echo &; #039; incremental_basedir found,do a increment backup&; #039;
/usr/bin/innobackupex-uroot-p $ { passwd }-no-timestamp $ { ops }
incrementalincremental _ basedir=$ { bpath }/lsn _ $ { last } /
extra-lsn dir=$ { bpath }/lsn _ $ { now }/$ { bpath }stream=XB stream|gzip
|sshpass-p&; #039; ${sshpass}&; #039; ssh-p18122root@10.10.10.79&; #039; cat-
${bpath}/${now}.xbstram.gz&; #039;
else
echo&; #039; incremental_basedirnotfound,do a full backup&; #039;
/usr/bin/innobackupex-uroot-p $ { passwd }-no-timestamp $ { ops }
extra-lsn dir=$ { bpath }/lsn _ $ { now }/$ { bpath }stream=tar|gzip|ssh pass
-p&; #039; ${sshpass}&; #039; ssh-p18122root@10.10.10.79&; #039; cat-
${bpath}/${now}.tgz&; #039;
fi
}
case $hour in
22 ) )。
last=`date %F -d -yesterday `
find/data1/EHR-MySQL-backup/- name & amp; #039; ${last}*&; #039; -typed-execRM-r&; #039; {}\\&; quot;
day=`date %F -d 1days `
备份
;
10 ) )。
last=`date %F_%H -d -12hours `
备份
;
十四|十八)
last=`date %F_%H -d -4hours `
备份
;
* )
echo &; #039; not backup time&; #039;
;
欧洲航空
详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn