shell 多进程机制
来源:互联网 发布:mac pro双系统玩游戏 编辑:程序博客网 时间:2024/06/15 08:30
#!/usr/bin/ksh
curtime=`date "+%Y-%m-%d_%H:%M:%S"`
Workdir=`pwd`
cfgfile="${Workdir}/cfg/baseinf.cfg"
backuplogfile="${Workdir}/log/backup.log"
flagdir="${Workdir}/flag"
###############################
Sublog()
{
echo "[ `date '+%Y%m%d %H:%M:%S'` ] $*" | tee -a ${backuplogfile}
}
###############################
GetCfg()
{
if [ $# -ne 3 ];then
print "Error!!Get config value failed!!($*)"
return 1
fi
tmpCfgFile="$1"
tmpKey="$2"
tmpValue=`cat ${tmpCfgFile}|grep "${tmpKey}"|grep -v "\["|head -n 1|awk -F "#" '{ print $1 }'|awk -F "=" '{ print $2 }'|tr -d " \t\n\r"`
eval $3="${tmpValue}"
return 0
}
#################################
f_getsql()
{
sqlplus -s ${dbname} >>$backuplogfile <<!
spool sql_temp_$tablename.txt;
select column_name from user_tab_columns where table_name= upper('${tablename}') order by column_id;
spool off;
exit
!
#begin add by yinzhida 20110811
#输出错误日志,一般为数据库用户配置错误
if [ "$?" -ne 0 ]; then
sed -n '5,$'p $backuplogfile
fi
#end add by yinzhida 20110811
if [ -f sql_temp_$tablename.txt ]; then
cat sql_temp_$tablename.txt|grep -v "COLUMN_NAME" |grep -v " *-" |grep -v " rows selected" |awk '{print $1}' > sql_temp1_$tablename.txt
sed -e '/^[[:space:]]*$/d' sql_temp1_$tablename.txt > sql_temp2_$tablename.txt
else
Sublog "DataBase : ${dbname}, Error :get the column of $tablename failed!!!!!!!!!!!!!!!!"
exit
fi
fields=""
fields2=""
lv_line_num=`cat sql_temp2_$tablename.txt | wc -l`
lv_index=0
while read field
do
lv_index=`expr ${lv_index} + 1`
if [ ${lv_index} -eq ${lv_line_num} ]; then
fields=${fields}${field}"||""'|'"
fields2=${fields2}${field}
else
fields=${fields}${field}"||""'|'""||"
fields2=${fields2}${field}","
fi
done < sql_temp2_$tablename.txt
sql="select "${fields}" from ${tablename} "${condition}
rm sql_temp_$tablename.txt sql_temp1_$tablename.txt sql_temp2_$tablename.txt
}
##########################################
wait_process()
{
sleep 1
while [ 1 ]
do
process_count=`ls ${flagdir}/*.ps 2>/dev/null |wc -l`
if [ $process_count -ge $pronum ];then
sleep 5
else
break
fi
done
}
##########################################
wait_allprocess()
{
sleep 1
while [ 1 ]
do
process_count=`ls ${flagdir}/*.ps 2>/dev/null |wc -l`
if [ $process_count -ge 1 ];then
sleep 5
else
break
fi
done
}
##########################################
# main
GetCfg $cfgfile "DBNAME" dbname
GetCfg $cfgfile "DBTYPE" dbtype
GetCfg $cfgfile "TABFILE" tablelist
GetCfg $cfgfile "PRONUM" pronum
dbtype=`echo $dbtype|tr "[:upper:]" "[:lower:]"`
#begin add by yinzhida 20110811
#判断是否已存在备份,
file_count=`ls ${Workdir}/bak/*.unl 2>/dev/null |wc -l`
if [ $file_count -gt 0 ];then
echo "the backup files existed, backup again(y/n)?"
read tmpval
tmpval2=`echo $tmpval|tr "[:upper:]" "[:lower:]"`
if [ $tmpval2 != "y" ];then
exit
fi
fi
#end add by yinzhida 20110811
echo "" > ${backuplogfile}
rm -f ${flagdir}/*.ps
rm -f ${flagdir}/backup.flag
Sublog "=== begin backup table from ${dbtype} phydb ==="
Sublog "DataBase : ${dbname}"
Sublog "Process count : ${pronum}"
for tablename in `cat ${Workdir}/cfg/$tablelist`
do
wait_process
( touch ${flagdir}/${tablename}.ps
Sublog "--- begin backup $tablename..."
f_getsql
sqlplus -s ${dbname} > /dev/null <<!
set head off
set serveroutput on
set feedback off
set trims on
set pagesize 0
set timing off
set termout off
set lin 5000
alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
spool bak/$tablename.unl
$sql;
spool off
set serveroutput off
!
if [ "$?" -ne 0 ]; then
Sublog "+++ backup table ${tablename} failed!!!!!!!!!!!!!!!!!!"
else
Sublog "+++ backup table ${tablename} successfully"
fi
rm ${flagdir}/${tablename}.ps ) &
done
wait_allprocess
echo "" > ./flag/backup.flag
Sublog "=== end backup table from oracle phydb ==="
# end
curtime=`date "+%Y-%m-%d_%H:%M:%S"`
Workdir=`pwd`
cfgfile="${Workdir}/cfg/baseinf.cfg"
backuplogfile="${Workdir}/log/backup.log"
flagdir="${Workdir}/flag"
###############################
Sublog()
{
echo "[ `date '+%Y%m%d %H:%M:%S'` ] $*" | tee -a ${backuplogfile}
}
###############################
GetCfg()
{
if [ $# -ne 3 ];then
print "Error!!Get config value failed!!($*)"
return 1
fi
tmpCfgFile="$1"
tmpKey="$2"
tmpValue=`cat ${tmpCfgFile}|grep "${tmpKey}"|grep -v "\["|head -n 1|awk -F "#" '{ print $1 }'|awk -F "=" '{ print $2 }'|tr -d " \t\n\r"`
eval $3="${tmpValue}"
return 0
}
#################################
f_getsql()
{
sqlplus -s ${dbname} >>$backuplogfile <<!
spool sql_temp_$tablename.txt;
select column_name from user_tab_columns where table_name= upper('${tablename}') order by column_id;
spool off;
exit
!
#begin add by yinzhida 20110811
#输出错误日志,一般为数据库用户配置错误
if [ "$?" -ne 0 ]; then
sed -n '5,$'p $backuplogfile
fi
#end add by yinzhida 20110811
if [ -f sql_temp_$tablename.txt ]; then
cat sql_temp_$tablename.txt|grep -v "COLUMN_NAME" |grep -v " *-" |grep -v " rows selected" |awk '{print $1}' > sql_temp1_$tablename.txt
sed -e '/^[[:space:]]*$/d' sql_temp1_$tablename.txt > sql_temp2_$tablename.txt
else
Sublog "DataBase : ${dbname}, Error :get the column of $tablename failed!!!!!!!!!!!!!!!!"
exit
fi
fields=""
fields2=""
lv_line_num=`cat sql_temp2_$tablename.txt | wc -l`
lv_index=0
while read field
do
lv_index=`expr ${lv_index} + 1`
if [ ${lv_index} -eq ${lv_line_num} ]; then
fields=${fields}${field}"||""'|'"
fields2=${fields2}${field}
else
fields=${fields}${field}"||""'|'""||"
fields2=${fields2}${field}","
fi
done < sql_temp2_$tablename.txt
sql="select "${fields}" from ${tablename} "${condition}
rm sql_temp_$tablename.txt sql_temp1_$tablename.txt sql_temp2_$tablename.txt
}
##########################################
wait_process()
{
sleep 1
while [ 1 ]
do
process_count=`ls ${flagdir}/*.ps 2>/dev/null |wc -l`
if [ $process_count -ge $pronum ];then
sleep 5
else
break
fi
done
}
##########################################
wait_allprocess()
{
sleep 1
while [ 1 ]
do
process_count=`ls ${flagdir}/*.ps 2>/dev/null |wc -l`
if [ $process_count -ge 1 ];then
sleep 5
else
break
fi
done
}
##########################################
# main
GetCfg $cfgfile "DBNAME" dbname
GetCfg $cfgfile "DBTYPE" dbtype
GetCfg $cfgfile "TABFILE" tablelist
GetCfg $cfgfile "PRONUM" pronum
dbtype=`echo $dbtype|tr "[:upper:]" "[:lower:]"`
#begin add by yinzhida 20110811
#判断是否已存在备份,
file_count=`ls ${Workdir}/bak/*.unl 2>/dev/null |wc -l`
if [ $file_count -gt 0 ];then
echo "the backup files existed, backup again(y/n)?"
read tmpval
tmpval2=`echo $tmpval|tr "[:upper:]" "[:lower:]"`
if [ $tmpval2 != "y" ];then
exit
fi
fi
#end add by yinzhida 20110811
echo "" > ${backuplogfile}
rm -f ${flagdir}/*.ps
rm -f ${flagdir}/backup.flag
Sublog "=== begin backup table from ${dbtype} phydb ==="
Sublog "DataBase : ${dbname}"
Sublog "Process count : ${pronum}"
for tablename in `cat ${Workdir}/cfg/$tablelist`
do
wait_process
( touch ${flagdir}/${tablename}.ps
Sublog "--- begin backup $tablename..."
f_getsql
sqlplus -s ${dbname} > /dev/null <<!
set head off
set serveroutput on
set feedback off
set trims on
set pagesize 0
set timing off
set termout off
set lin 5000
alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
spool bak/$tablename.unl
$sql;
spool off
set serveroutput off
!
if [ "$?" -ne 0 ]; then
Sublog "+++ backup table ${tablename} failed!!!!!!!!!!!!!!!!!!"
else
Sublog "+++ backup table ${tablename} successfully"
fi
rm ${flagdir}/${tablename}.ps ) &
done
wait_allprocess
echo "" > ./flag/backup.flag
Sublog "=== end backup table from oracle phydb ==="
# end
0 0
- shell 多进程机制
- shell 多进程
- shell中的多进程
- linux shell多进程
- shell 多进程
- shell的多进程方式
- shell中的多进程【并发】
- shell多进程并发控制
- Shell实现多进程运行
- shell中的多进程【并发】
- shell中的多进程【并发】
- shell-进程
- 多进程机制术语-Polling
- Chromium多进程机制解析
- shell文件中,多进程运行
- bash shell实现并发多进程操作
- Shell实现多进程并发执行
- shell文件中,多进程运行
- 字符串排序
- php 多太性
- S3C6410 Memory Map & ARM 指令集 笔记
- 安卓经典盈利模式
- 如何促进长尾词的文字收录呢
- shell 多进程机制
- 浅谈新网站如何有效进行网站外链建设
- android ListView,GridView 使用小结
- win7下将Sublime Text2 加入右键菜单
- sqlite3
- 常用SQL
- 算法 时间复杂度|空间复杂度
- 智能可穿戴设备怎样破局
- 模版实参的推断和引用