如何检测并杀死一个楔形的soffice.bin进程?

时间:2012-12-06 21:17:32

标签: openoffice.org libreoffice

我正在使用libreoffice / openoffice作为无头进程来处理我通过unoconv“提交”的服务器上的某些文档转换任务。偶尔,实际完成工作的过程soffice.bin似乎被楔入了。我试着玩strace并看到当启动新的unoconv实例时,他们仍然连接并与soffice进程交谈,只是在“坏”文档进入后没有其他事情发生。如果只是为了检测那个soffice那么简单不再与传入的套接字通信,编写看门狗很容易。但显然并非那么简单。有什么想法告诉我什么时候出现了什么东西?

2 个答案:

答案 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. 使用unoconv作为服务。
  2. 创建一个init.d脚本并从守护进程开始。
  3. 因此,取消unoconv调用soffice启动,unoconv作为服务将继续运行单个并维护它。
  4. 创建启动流程文件如下:
  5. !/ bin / sh的

    中的案例“$ 1”

    开始)

    / usr / bin / unoconv --listener&

    ;;

    停止)

    killall soffice.bin

    ;;

    重新启动)

    killall soffice.bin

    睡1

    / usr / bin / unoconv --listener&

    ;;

    ESAC