cat、pipe 和 acroread - 为什么偶尔会失败?

cat、pipe 和 acroread - 为什么偶尔会失败?

在一个简单的 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 命令)

答案1

你可以让你的 shell 脚本变得更简单,看看是否至少能得到更好的错误消息:

 /opt/Adobe/Acrobat7.0/bin/acroread -toPostScript < /filelocation/myoutput.PDF

这也使得建议的 strace 更加美观:

 strace -f -o /tmp/acroread.$$.strace /opt/Adobe/Acrobat7.0/bin/acroread -toPostScript < /filelocation/myoutput.PDF

答案2

您可以尝试使用 pdf2ps:

pdf2ps [ options ] input.pdf [output.ps]

或者,您可能想要安装较新版本的 Adob​​e Acrobat。

答案3

我假设,由于您使用的是STDOUT/STDIN版本-toPostScript,因此您正在将输出传输到acroreadto lp(问题中未显示?)。我感觉您遇到了假脱机问题 —— 要么您正在完全填满假脱机(这会导致lpto barf),要么遇到了其他类型的限制。

此主题讨论了一些无法打印大文件的诊断方法(尽管我怀疑连续快速打印许多小文件可能会导致同样的问题)——

  • 检查您的 /var/spool/lp 是否有足够的可用空间。
  • 假设 /var/spool 是挂载点,请检查此文件系统是否已打开“largefiles”选项。(可能不适用于您的情况)。

我对印刷不太了解,但是我绝对认为这是lp导致问题的原因,而不是catacroread或管道一般情况下。(不过,如果你怀疑,acroread你可以尝试一下pdf2ps,这是xpdf)。

答案4

如果管道没有正确关闭并试图重新打开,则可能会发生这种情况。如果您的负载很重,就像您所说的那样,则可能会发生这种情况。

尝试在调用之间引入一个减速因素。也许在调用脚本之间添加一个“wait 1”命令。

相关内容