- 论坛徽章:
- 0
|
shell脚本unload_8738.sh:- #!/bin/ksh
- #切换脚本当前工作目录
- cd $1
- if [ $? -ne 0 ]; then
- date '+%Y%m%d %H:%M' >> unload_8738_err.log
- echo "cd $1 error" >> unload_8738_err.log
- exit
- fi
- #检查当前系统运行脚本unload_8738.sh进程数
- #如果进程数大于1则退出执行
- P=`ps -ef | grep "unload_8738.sh" | grep -v "grep" | wc -l`
- if [ $P -gt 1 ]; then
- date '+%Y%m%d %H:%M' >> unload_8738_err.log
- echo "unload_8738.sh is runing, pid num: $P" >> unload_8738_err.log
- exit
- fi
- #开始生成对账文件之前检查OK文件,如果已存在则删除
- if [ -f "$2.OK" ]; then
- /bin/rm $2.OK
- fi
- while [ 1 == 1 ]; do
- dbaccess $AP_DATABASE_NAME <<!
- set lock mode to wait 120;
- --开始提取对账文件数据
- unload to $2.temp
- SELECT *
- FROM CC_Info
- WHERE name in ('$3', '$3XYK')
- AND date>= '$4' AND date <= '$5';
- set lock mode to wait 30;
- !
- if [ $? -ne 0 ]; then
- date '+%Y%m%d %H:%M' >> unload_8738_err.log
- echo "unload 8738 data error" >> unload_8738_err.log
- else
- break
- fi
- done
- while [ 1 == 1 ]; do
- P=`ps -fu cbs | grep "unload_8738.sh" | grep -v "grep" | wc -l`
- if [ $P == 1 ]; then
- #去掉文件行末尾"|"字符
- sed 's/|$//' $2.temp > $2
-
- #统计对账记录数,并追加至对账文件末尾
- lCn=`wc -l $2 |awk '{print $1}'`
- echo "--------------------------------------------" >> $2
- echo $lCn >> $2
- /bin/rm $2.temp
-
- #生成OK文件
- echo "unload file $2 done!!!" > $2.OK
- break
- fi
- sleep 60
- done
- exit
复制代码 我每次运行的时候: unload_8738.sh /home/acs DZ.txt 20160721 20160722
非常确认第一次运行脚本已经执行完成,而且相应的OK文件也已经生成了,脚本成功退出,但是第二次运行会报错:
日志:- unload_8738.sh is runing, pid num: 2
- 20160722 18:32
- unload_8738.sh is runing, pid num: 2
- 20160722 18:32
- unload_8738.sh is runing, pid num: 2
- 20160722 18:33
- unload_8738.sh is runing, pid num: 2
复制代码 看了一下代码 是 P=`ps -ef | grep "unload_8738.sh" | grep -v "grep" | wc -l` 获取进程数大于1
我很纳闷,第一次脚本已执行完,确认退出了,哪里来的进程大于1呢?难道操作系统进程也会有缓存?
我运行的操作性是 AIX 6.1 shell 用的是 ksh
求解啊,谢谢各位!
|
|