我使用libreoffice/openoffice作为一个无头进程,在我的服务器上处理一些我通过unoconv“提交”的文档转换任务。有时,实际执行工作的进程soffice.bin似乎被卡住了。我试着尝试使用strace,发现当启动新的unoconv实例时,它们仍然连接并与soffice进程对话,只是在“坏的”文档进入后没有其他事情发生。如果只是简单地检测soffice不再与传入套接字通信,那么编写watchdog就很容易了。但很明显,事情并没有那么简单。有没有办法知道什么时候事情变得糟糕了?
发布于 2013-01-03 17:59:43
下面是我设置为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看起来工作正常。
发布于 2017-06-19 14:14:32
问题可能与soffice多线程有关,因此解决技巧可能如下所示:
使用unoconv作为service.
!/bin/sh
中的案例"$1“
((开始))
*/usr/bin/unoconv --listener &
*;
((停止))
*killall soffice.bin
*;
((重新启动))
*killall soffice.bin
睡眠时间:1。
*/usr/bin/unoconv --listener &
*;
esac
https://stackoverflow.com/questions/13752742
复制相似问题