在一个简单的shell脚本我试图运行这个命令:
cat /filelocation/myoutput.PDF | /opt/Adobe/Acrobat7.0/bin/acroread -toPostScript
在大多数情况下,这是工作。 但偶尔,我得到一个错误:
lp: standard input is empty lp: request not accepted Broken pipe cat: Cannot write to output.
这似乎只发生在负载繁重的情况下,我们正在处理大量的pdfrecursion。 (用不同的文件反复调用所述shell命令)
你可以使你的shell脚本更简单,看看你是否至less可以得到更好的错误信息:
/opt/Adobe/Acrobat7.0/bin/acroread -toPostScript < /filelocation/myoutput.PDF
这也使得build议更好一些:
strace -f -o /tmp/acroread.$$.strace /opt/Adobe/Acrobat7.0/bin/acroread -toPostScript < /filelocation/myoutput.PDF
你可以尝试使用pdf2ps:
pdf2ps [ options ] input.pdf [output.ps]
或者,您可能需要安装较新版本的Adobe Acrobat。
我假设你正在使用STDOUT / STDIN版本的-toPostScript来pipe道到acroread的输出到lp (在问题中没有显示)。 我有一个感觉,你正在打一个假脱机的问题 – 要么完全填满线轴(这会导致lp到barf)或打其他一些限制。
这个线程讨论了一些无法打印大文件的诊断(虽然我怀疑快速连续打印很多小文件可能导致相同的问题)
- 检查你的/ var / spool / lp是否有足够的可用空间。
- 假设/ var / spool是挂载点,请检查此文件系统是否打开了“largefiles”选项。 (可能不适用于你的情况)。
我对打印技术一无所知,但我确实认为这是造成这个问题的原因,而不是cat , acroread或pipe道 。 (但是,如果您怀疑acroread ,则可以尝试pdf2ps ,即xpdf附带的实用程序)。
发生这种情况是acroread在发送任何输出之前死亡。 没有发现它为什么死了,你没有修理它的机会。 鉴于它是封闭的源代码,你可以做的唯一的事情就是尝试使用strace来查看它在死的时候正在做什么。
cat /filelocation/myoutput.PDF | strace -f -o /tmp/acroread.$$.strace /opt/Adobe/Acrobat7.0/bin/acroread -toPostScript
这会使acroread慢很多,但希望能够在低负载下使其失败,所以应该更快地查看是什么导致了问题。 注意这使用$$来使用脚本的进程ID。 如果您从同一个脚本中多次调用此方法,则需要find其他方法来使用不同的文件。
如果pipe道没有正确closures并且试图重新打开,则可能发生这种情况。 这可能会发生,如果你在沉重的负荷,就像你说的那样。
尝试引入呼叫之间的放缓因素。 也许在对脚本的调用之间抛出一个“等待1”的命令。