我必须经常在我的计算机上运行bash heavy-job.sh <data-num>
(需要0.5~2天)来处理位于〜/ a / data / num 的数据。该脚本按顺序调用几个子进程并将日志写入〜/ a / result / num .log。到目前为止,我已手动完成此操作。
我希望将已处理的任务及其状态(成功或失败)等可视化为html表。我写了一个简单的sinatra应用程序来呈现一个显示
的表我发现如果我可以从sinatra应用程序启动bash heavy-job.sh <data-num>
,记录任务(以及时间,日期等信息)和它的args(重-jobs需要一些可选的args)并将它们显示为html表。
所以我需要管理作业和日志到文件(或db)的东西。
首先,我编写了一个类似下面的代码用于测试(!用于测试,还没有与我的系统集成!),但后来我发现resque是我想要的。我是初学者,不确定我的决定是否合理。
我的问题是
作业并不重要,因为如果失败,我可以稍后手动重试任务。 我不擅长英语,我的问题可能会误导。我感谢任何帮助:)。
class TaskSpawn
def initialize()
@pids = []
end
def spawn(command, options = {})
#opt = {:pgroup => true}
@pids << Kernel.spawn(command, options)
end
def pids()
return @pids.clone
end
def waitany_nohang()
delete_idx = nil
ret = nil
@pids.each_with_index do |p, idx|
pid,status = Process.waitpid2(p, Process::WNOHANG)
unless pid.nil?
delete_idx = idx
ret = [pid,status]
break
end
end
if delete_idx
@pids.delete_at(delete_idx)
return ret
else
# no task fininshed
return nil
end
end
def waitall()
ret = waitall
raise "interal error" if ret.size != pids.size
return ret
end
end