我正在编写一个自动在AWS中创建大量资源的脚本(除了一些其他任务),但开发和测试非常耗时,因为我可以一直到最后让脚本失败,然后我必须纠正错误并再次运行脚本。
是否有任何shell脚本工具(unix或ruby甚至Windows),如果发生故障,我可以在中间启动脚本?也许有一些方法可以让rake
在没有所有相关任务的情况下运行任务?
更新
为了澄清,我不是在寻找任何复杂的东西,在调用之间保持状态;我正在谈论编写一个简单的shell脚本,可能需要几十个连续的步骤,每个步骤需要很长时间。换句话说,如果脚本在第10步爆炸,我想在步骤10再次启动脚本,而不必重新运行所有前面的步骤。
答案 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 1
或grep ERROR /tmp/script.log
此解决方案的一个好处是您可以阅读所有行,只需在其上调用#.to_i
即可。这样你很容易得到id。
如果你有几百万个条目,你的文件会得到很多,但你可以把它扔掉。