我使用 libreoffice/openoffice 作为 headless 进程来处理我的服务器上的一些文档转换任务,这些任务是我通过 unoconv“提交”的。有时,实际执行工作的进程 soffice.bin 似乎会陷入困境。我尝试使用 strace,发现在启动新的 unoconv 实例时,它们仍然连接并与 soffice 进程对话,只是在“坏”文档进入后没有发生任何其他事情。如果它如此简单,只检测该 soffice不再与传入的套接字通信,编写看门狗很容易。但显然事情并没有那么简单。有什么想法如何判断事情是否已经恶化?
最佳答案
这是我设置的 cron 作业:
def monitor_unoconv
retval = false
target_dir = "/tmp/monitor_unoconv"
begin
Timeout::timeout(30) do
FileUtils.mkdir_p(target_dir)
FileUtils.cp(File.dirname(__FILE__) + "/../hello.odt", target_dir)
Dir.chdir target_dir do
retval = system("unoconv -f html hello.odt")
end
end
rescue => e
STDERR.puts "Caught error #{e.inspect}"
retval = false
end
if !retval
STDERR.puts "soffice process appears hung. Killing it"
STDERR.puts `killall soffice.bin`
sleep 5
STDERR.puts `killall -9 soffice.bin`
end
end
看起来工作正常。
关于openoffice.org - 如何检测并终止楔入的 soffice.bin 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13752742/