【发布时间】:2014-06-27 16:16:40
【问题描述】:
我在 AIX 6.1 下的 ksh(不是 ksh93)中使用这一行
# initiate earlier
LineStart=235559
cst_TracorTailLook=128
FileName=/LongPathWithSlash/logs/file.log
# /LongPathWithSlash/logs/file.log -> file_log.27Jun2014-00:00:00
# File is about 250.000 line and 60.000.000 bytes or more
# the failing line
tail -n +$(( ${LineStart} - ${cst_TracorTailLook} + 1 )) ${FileName} |
SomeAction
在直接会话中运行,没问题,它返回结果(在管道返回多行后用wc -l 测试)但是从代理(Tivoli 监控代理)运行返回:
tail: 0652-046 Cannot write to output.
There is no process to read data written to a pipe.
寻找限制我发现代理的限制(ulimit-a)比直接会话少
Direct Agent
time(seconds) unlimited unlimited
file(blocks) unlimited unlimited
data(kbytes) 131072 unlimited
stack(kbytes) 32768 32768
memory(kbytes) 32768 32768
coredump(blocks) 2097151 unlimited
nofiles(descriptors) 2000 unlimited
threads(per process) unlimited unlimited
processes(per user) unlimited unlimited
我在 AIX 5.3 上发现了几个关于 2 Gb 限制的问题,但这不是大小,也不是操作系统版本
最终,有没有不通过临时文件的替代方案?
【问题讨论】:
-
经过大量分析,原因是由于文件在短时间内被修改和使用内存而导致文件上的管道“丢失”。更多的内存肯定会有所帮助,但不可能,解决方案是(不希望的)将信息提取到一个临时文件并从这个文件中工作