我正在使用 libreoffice/openoffice 作为无头进程来处理我通过 unoconv “提交”的服务器上的一些文档转换任务。有时,实际完成工作的进程 soffice.bin 似乎被卡住了。我尝试使用 strace 并看到在启动新的 unoconv 实例时,它们仍然连接并与 soffice 进程对话,只是在“坏”文档进入后没有其他任何事情发生。如果它只是检测到那个 soffice不再与传入的套接字对话,编写看门狗很容易。但这显然不是那么简单。任何想法如何判断事情何时向南?
问问题
4842 次
2 回答
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
似乎工作正常。
于 2013-01-03T09:59:43.317 回答
0
问题可能与 soffice 多线程有关,因此解决技巧可能如下:
- 使用 unoconv 作为服务。
- 创建一个 init.d 脚本并作为守护进程启动。
- 因此,unoconv 不会调用 soffice 来启动,而是 unoconv 作为服务将继续运行并维护它。
- 创建启动进程文件如下:
!/bin/sh
案例“$1”在
开始)
/usr/bin/unoconv --listener &
;;
停止)
killall soffice.bin
;;
重新开始)
killall soffice.bin
睡觉 1
/usr/bin/unoconv --listener &
;;
经社理事会
于 2017-06-19T06:14:31.540 回答