在一个简单的 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.
这似乎只发生在我们递归处理大量pdf的重负载下。(用不同的文件一遍又一遍地调用所说的shell命令)
你可以让你的 shell 脚本更简单,看看你是否至少能得到更好的错误信息:
这也使建议的 strace 更好一些:
您可以尝试使用 pdf2ps:
或者,您可能想要安装较新版本的 Adobe Acrobat。
我假设由于您使用的是
STDOUT
/STDIN
版本,-toPostScript
因此您将管道传输到 to 的输出acroread
(lp
问题中未显示?)。我有一种感觉,你遇到了一个假脱机问题——要么你完全装满了假脱机(这会导致lp
呕吐),要么达到了其他类型的限制。该线程讨论了无法打印大文件的一些诊断(尽管我怀疑快速连续打印许多小文件会导致相同的疾病)-
我对打印一无所知,但我绝对认为这
lp
是导致问题的原因,而不是一般cat
的acroread
管道。(不过,如果您怀疑acroread
您可以尝试pdf2ps
使用 附带的实用程序xpdf
)。如果 acroread 在发送任何输出之前就死了,就会发生这种情况。不知道它为什么死了,你就没有机会修复它。鉴于它是封闭源代码,您唯一能做的就是尝试使用 strace 来查看它死后在做什么。
这将使 acroread 变慢很多,但希望它会在较低负载下失败,因此应该更快地查看导致问题的原因。请注意,这使用 $$ 来使用脚本的进程 ID。如果您从同一个脚本中多次调用它,则需要找到使用不同文件的其他方法。
如果管道未正确关闭并试图重新打开,则可能会发生这种情况。如果您像您说的那样承受重负载,则可能会发生这种情况。
尝试在通话之间引入减速因素。也许在调用你的脚本之间抛出一个“等待 1”命令。