-
path = "'$POP_ALL_INFILE_PATH'/"pop_name;
-
-
CMD="[ ! -d "path" ] && mkdir -p "path;
-
system(CMD);
-
close(CMD);
-
if ($3 >= pop_alarm_bw * '$GLBDOMAIN2FARM_FORECAST_MIN_PERCENT') {
-
print "'$file_data_time'",$3 / 1000.0 / 1000.0 >> "'$POP_ALL_INFILE_PATH'/"pop_name"/"$1"_"$2;
-
print pop_name,$1"_"$2>> "'$FORECASE_INFILE'/'$TYPE'/glbdomain_update_list";
-
close("'$POP_ALL_INFILE_PATH'/"pop_name"/"$1"_"$2);
-
}
刚开始是无两行close的,但此时程序运行会发现到后面一些目录就无法创建,此时print一些数据到这些目录中的文件就会失败,程序会直接退出。用value = system(CMD);获取了下返回值,发现当程序跑到一定程度的时候返回值为127,根据网上查找有可能是打开的文件过多,第一反应是CMD命令执行后没有关闭,此时lsof发现并不是这个原因,而是
awk用print把数据打入到一个文件的时候,会打开此文件,且不会立马关闭,而会在整个awk执行结束后在关闭此文件。这样的话就会导致一个进程打开文件个数过多从而无法在穿件目录,也就无法把数据写到要创建目录下面的文件。
总结:对于awk调用命令有管道的产生或者有打开文件的操作,要在执行结束后用close进行相应的关闭。
阅读(2187) | 评论(0) | 转发(1) |