0

我在 rails 中调用 ffmpeg 命令来 grep 流并将其推送到 Wowza 以便苹果设备也可以看到它,命令是这样的

Thread.new do
  `/usr/local/bin/ffmpeg -re -i http://10.191.255.90:30080/#{user.phone} -vcodec libx264 -vpre ipod640 -g 15 -acodec libvo_aacenc -ar 8000 -ac 1 -f flv rtmp://127.0.0.1/live/#{user.phone}`
end

有时该进程会因为网络中断或其他原因而被杀死,我想知道有没有办法可以监视该进程,以便一旦它停止我就可以重新启动它

我目前的想法是记录进程的 pid,让有人喜欢resque检查给定 pid 的进程是否每 60 秒运行一次,但我有很多这样的进程,所以我想知道它以后会遇到性能问题。

是否有更好的解决方案来管理 Ruby 中的这些流程?

4

1 回答 1

0

你可以这样做:

Thread.new do
  begin
    Process.wait Process.spawn 'find /oeinfsroif'
    raise unless $?.exitstatus == 0
  rescue
    retry
  end
end.join

管理失败前的尝试次数:

Thread.new do
  max_attempts = 10
  attempts = 0
  begin
    Process.wait Process.spawn 'find /oeinfsroif'
    raise unless $?.exitstatus == 0
  rescue
    attempts += 1
    attempts < max_attempts ? retry : raise 
  end
end.join

输出:

find: `/oeinfsroif': No such file or directory
find: `/oeinfsroif': No such file or directory
find: `/oeinfsroif': No such file or directory
find: `/oeinfsroif': No such file or directory
find: `/oeinfsroif': No such file or directory
find: `/oeinfsroif': No such file or directory
find: `/oeinfsroif': No such file or directory
find: `/oeinfsroif': No such file or directory
find: `/oeinfsroif': No such file or directory
find: `/oeinfsroif': No such file or directory
rb:6:in `block in <main>': unhandled exception
于 2013-04-18T08:07:53.757 回答