Chinaunix首页 | 论坛 | 博客
  • 博客访问: 579661
  • 博文数量: 84
  • 博客积分: 1529
  • 博客等级: 上尉
  • 技术积分: 1482
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-27 17:57
文章分类

全部博文(84)

文章存档

2014年(7)

2013年(9)

2012年(20)

2011年(48)

分类: LINUX

2013-04-08 09:36:52


点击(此处)折叠或打开

  1. path = "'$POP_ALL_INFILE_PATH'/"pop_name;
  2.                 
  3.                 CMD="[ ! -d "path" ] && mkdir -p "path;
  4.                 system(CMD);
  5.                 close(CMD);
  6.                 if ($3 >= pop_alarm_bw * '$GLBDOMAIN2FARM_FORECAST_MIN_PERCENT') {
  7.                     print "'$file_data_time'",$3 / 1000.0 / 1000.0 >> "'$POP_ALL_INFILE_PATH'/"pop_name"/"$1"_"$2;
  8.                     print pop_name,$1"_"$2>> "'$FORECASE_INFILE'/'$TYPE'/glbdomain_update_list";            
  9.                     close("'$POP_ALL_INFILE_PATH'/"pop_name"/"$1"_"$2);
  10.                 }

刚开始是无两行close的,但此时程序运行会发现到后面一些目录就无法创建,此时print一些数据到这些目录中的文件就会失败,程序会直接退出。用value = system(CMD);获取了下返回值,发现当程序跑到一定程度的时候返回值为127,根据网上查找有可能是打开的文件过多,第一反应是CMD命令执行后没有关闭,此时lsof发现并不是这个原因,而是
awk用print把数据打入到一个文件的时候,会打开此文件,且不会立马关闭,而会在整个awk执行结束后在关闭此文件。这样的话就会导致一个进程打开文件个数过多从而无法在穿件目录,也就无法把数据写到要创建目录下面的文件。 

总结:对于awk调用命令有管道的产生或者有打开文件的操作,要在执行结束后用close进行相应的关闭。
阅读(2176) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~