我在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个sencod运行一次,但是我有很多这样的进程所以我想知道它会在以后遇到性能问题。
在Ruby中管理这些流程是否有更好的解决方案?
答案 0 :(得分: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