免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3676 | 回复: 15
打印 上一主题 下一主题

[did] while do ... done 中断费解,请大家帮我分析一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-17 06:57 |只看该作者 |倒序浏览
本帖最后由 bigxu 于 2012-02-17 16:47 编辑
  1. # cat bak_dirs.txt
  2. dir1
  3. dir2



  4. # cat bak.sh
  5. cat bak_dirs.txt | while read line
  6. do
  7.         tar -czf /bak/$line.tgz  $line
  8. done
复制代码
根据sh -x 跟踪发现:
如果dir1很大,比如超过20G,while语句在备份完dir1,且读取bak_dirs.txt第二行后会退出.
如果dir1较一小,则一切正常

这个可能是什么原因呢,脚本执行超时,内存超限? 我想不出,请大家帮我分析一下






论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2012-02-17 09:23 |只看该作者
回复 1# bigxu


    不应该吧。

论坛徽章:
0
3 [报告]
发表于 2012-02-17 09:34 |只看该作者
blackold 发表于 2012-02-17 09:23
回复 1# bigxu


不过,确实是这样。这是我的部分源码
  1. cat bak_hosts | grep -v ^# | while read line
  2. do
  3.         echo $($log_date)" $line start"
  4.         # echo $line
  5.         # var=$(echo $line | awk -F" " '{print $1,$2,$3}')   
  6.         # http://www.unix.com/shell-programming-scripting/38450-split-string-using-separetor.html

  7.         set -- $line

  8.         rhost=$1
  9.         rpath=$2
  10.         mysql_pass=$3
  11.         bak_day=$4

  12.         if [ $mysql_pass = "DEFAULT" ]; then
  13.                 mysql_pass=$mysql_default_pass
  14.         fi
  15.        
  16.         # if "-" then do not bak mysql
  17.         if [ $mysql_pass != "-" ]; then
  18.                 echo $($log_date)" ssh_export_mysql start"
  19.                 #ssh_export_mysql $rhost $rpath $mysql_pass
  20.                 echo $($log_date)" ssh_export_mysql end"
  21.         fi

  22.         echo $($log_date)" rsync_file start"
  23.         #rsync_file $rhost $rpath
  24.         echo $($log_date)" rsync_file end"

  25.         echo $($log_date)" bak_file start"
  26.         bak_file $rhost $rpath $mysql_pass $bak_day
  27.         echo $($log_date)" bak_file end"

  28.         echo $($log_date)"-------------------------- "
  29. done  
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2012-02-17 09:39 |只看该作者
回复 3# bigxu


    代码又改变了?

论坛徽章:
0
5 [报告]
发表于 2012-02-17 09:43 |只看该作者
blackold 发表于 2012-02-17 09:39
回复 3# bigxu


源码繁,怕大家嫌啰嗦,发帖子提问时,我就把问题简化了一下

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2012-02-17 10:27 |只看该作者
回复 3# bigxu


    对于后一个脚本,-x 跟踪时发现什么问题?

论坛徽章:
0
7 [报告]
发表于 2012-02-17 10:52 |只看该作者
本帖最后由 bigxu 于 2012-02-17 10:54 编辑
blackold 发表于 2012-02-17 10:27
回复 3# bigxu


............
....
+ date +%Y-%m-%d-%H-%M-%S
+ echo 2012-02-17-10-39-22 bak_file end
+ date +%Y-%m-%d-%H-%M-%S


以上是第一行执行结果

+ echo 2012-02-17-10-39-22--------------------------
+ read line
+ date +%Y-%m-%d-%H-%M-%S
+ echo 2012-02-17-10-39-22 FINSHED ...

以上是第二行的执行结果
只有一个“+ read line" 就退出来了

论坛徽章:
0
8 [报告]
发表于 2012-02-17 11:11 |只看该作者
本帖最后由 hightman 于 2012-02-17 11:11 编辑

也许 bak_dirs.txt 发生了改变?或者什么文件描述字发生了改变?试试这样吧:
for line in `cat bak_dirs.txt`
do
...
done

lines=$(cat bak_dirs.txt)
for line in $lines
do
...
done

论坛徽章:
0
9 [报告]
发表于 2012-02-17 11:13 |只看该作者
hightman 发表于 2012-02-17 11:11
也许 bak_dirs.txt 发生了改变?或者什么文件描述字发生了改变?试试这样吧:
for line in `cat bak_dirs. ...


好,我试试,可能是
  1. cat bak_hosts | grep -v ^# | while read line
复制代码
有问题

论坛徽章:
0
10 [报告]
发表于 2012-02-17 12:55 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP