2

我正在使用 libreoffice/openoffice 作为无头进程来处理我通过 unoconv “提交”的服务器上的一些文档转换任务。有时,实际完成工作的进程 soffice.bin 似乎被卡住了。我尝试使用 strace 并看到在启动新的 unoconv 实例时,它们仍然连接并与 soffice 进程对话,只是在“坏”文档进入后没有其他任何事情发生。如果它只是检测到那个 soffice不再与传入的套接字对话,编写看门狗很容易。但这显然不是那么简单。任何想法如何判断事情何时向南?

4

2 回答 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 多线程有关,因此解决技巧可能如下:

  1. 使用 unoconv 作为服务。
  2. 创建一个 init.d 脚本并作为守护进程启动。
  3. 因此,unoconv 不会调用 soffice 来启动,而是 unoconv 作为服务将继续运行并维护它。
  4. 创建启动进程文件如下:

!/bin/sh

案例“$1”在

    开始)

        /usr/bin/unoconv --listener &

        ;;

    停止)

        killall soffice.bin

        ;;

    重新开始)

        killall soffice.bin

        睡觉 1

        /usr/bin/unoconv --listener &

        ;;

经社理事会

于 2017-06-19T06:14:31.540 回答