繁体   English   中英

如何从ruby执行和管理ruby脚本?

[英]How to execute and manage ruby script from ruby?

我有一个名为program.rb的脚本,并希望编写一个名为main.rb的脚本来执行以下操作:

system("ruby", "program.rb")

constantly check if program.rb is running until it is done
if program.rb has reached completion
    exit main.rb
end
otherwise keep doing this until program.rb reaches completion{
if program.rb is not running and stopped before completing
    restart program.rb from where it left off
end}

我已经研究过Pidify,但无法找到一种方法来应用它以完全正确的方式...任何有关如何处理此脚本的帮助将不胜感激!

更新:如果在main.rb中无法执行此操作,我可以弄清楚如何在program.rb中从中断处继续运行脚本

如果没有程序的完全合作,就不可能“从中断的地方重新启动脚本” program.rb 也就是说,它应该能够通告其进度(通过将当前状态写入文件,可能?)并且能够从ARGV中指定的步骤正确启动。 没有外部红宝石魔法可以取代这个功能。

此外,如果程序异常终止,则表示以下两种情况之一:

  • 错误是(半)永久性的(磁盘已满,对文件没有适当的访问权限等)。 在这种情况下,只需重新启动程序就会导致程序再次失败。 然后再次。 无限失败循环。
  • 错误是暂时的(摇摇欲坠的互联网连接)。 在这种情况下,程序应该在异常处理和自己重试(而不是终止)时做得更好。

在任何一种情况下,都不需要重启,恕我直言。

嗯,这是一种方式。

修改program.rb以获取可选的标志参数--restart或其他东西。

program.rb在没有此参数的情况下启动时,它将初始化文件以记录其当前状态。 它会定期将所需内容写入此文件以记录某种检查点。

program.rb 启动标记启动时,它会读取它的检查点文件,并在该点开始加工。 要使其工作,它必须检查所有状态更改或安排检查点之间的所有处理是幂等的,以便可以重复它而不会产生不良影响。

有很多方法可以监控program.rb的运行状况。 最好的方法是使用某种类型的ping,可能是类似GET /health_check或通过套接字或管道的虚拟消息。 您可以只有一个锁定的文件来检测锁是否仍然存在,或者您可以在启动时记录PID并检查它是否仍然存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM