我怎样才能创建一个脚本,以便在发生故障时从中断处继续?

时间:2013-12-06 21:35:29

标签: ruby shell scripting rake

我正在编写一个自动在AWS中创建大量资源的脚本(除了一些其他任务),但开发和测试非常耗时,因为我可以一直到最后让脚本失败,然后我必须纠正错误并再次运行脚本。

是否有任何shell脚本工具(unix或ruby甚至Windows),如果发生故障,我可以在中间启动脚本?也许有一些方法可以让rake在没有所有相关任务的情况下运行任务?

更新

为了澄清,我不是在寻找任何复杂的东西,在调用之间保持状态;我正在谈论编写一个简单的shell脚本,可能需要几十个连续的步骤,每个步骤需要很长时间。换句话说,如果脚本在第10步爆炸,我想在步骤10再次启动脚本,而不必重新运行所有前面的步骤。

2 个答案:

答案 0 :(得分:0)

你需要一路坚持你的进步状态,所以你知道从哪里开始。

但是,持久性可能是一百万件事。它可以是您连接的数据库,您编写的文件,memcached服务器。

因此,这实际上取决于您正在做什么,需要记录哪些数据以及您可以访问的数据持久性。


如果您有一个用于存储记录的数据库,这将像某些人一样简单:

MyThing.where(uploaded: false).each do |thing|
  thing.upload!
  thing.update_attribute uploaded: true
end

如果在一半时间内失败,它会从中断处继续,因为它标记了完整的记录。

答案 1 :(得分:0)

常见的轻量级方法是使用日志文件。

基本上你为每个执行的条目写一行到日志文件中。

例如:

  • <some_id> OK
  • <some_id> ERROR <some_reason>

通过这种方式,您可以获得最后的有效状态&#34;执行grep OK /tmp/script.log | tail -n 1grep ERROR /tmp/script.log

的所有错误

此解决方案的一个好处是您可以阅读所有行,只需在其上调用#.to_i即可。这样你很容易得到id。

如果你有几百万个条目,你的文件会得到很多,但你可以把它扔掉。