我正在使用libreoffice / openoffice作为无头进程来处理我通过unoconv“提交”的服务器上的某些文档转换任务。偶尔,实际完成工作的过程soffice.bin似乎被楔入了。我试着玩strace并看到当启动新的unoconv实例时,他们仍然连接并与soffice进程交谈,只是在“坏”文档进入后没有其他事情发生。如果只是为了检测那个soffice那么简单不再与传入的套接字通信,编写看门狗很容易。但显然并非那么简单。有什么想法告诉我什么时候出现了什么东西?
答案 0 :(得分:2)
这就是我设置的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
似乎工作正常。
答案 1 :(得分:0)
问题可能与soffice多线程有关, 所以解决伎俩可能就像:
中的案例“$ 1”
开始)
/ usr / bin / unoconv --listener&
;;
停止)
killall soffice.bin
;;
重新启动)
killall soffice.bin
睡1
/ usr / bin / unoconv --listener&
;;
ESAC