我有一个名为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中从中断处继续运行脚本
答案 0 :(得分:1)
如果没有program.rb
的全面合作,就不可能“从中断的地方重新启动脚本”。也就是说,它应该能够通告其进度(通过将当前状态写入文件,可能?)并且能够从ARGV中指定的步骤正确启动。没有外部红宝石魔法可以取代这个功能。
此外,如果程序异常终止,则表示以下两种情况之一:
在任何一种情况下,都不需要重启,恕我直言。
答案 1 :(得分:1)
嗯,这是一种方式。
修改program.rb
以获取可选的标志参数--restart
或其他内容。
当program.rb
在没有此参数的情况下启动时,它将初始化文件以记录其当前状态。它会定期将所需内容写入此文件以记录某种检查点。
当program.rb
使用重新启动标志启动时,它将读取其检查点文件并在此时开始处理。为了使其工作,它必须检查所有状态变化或安排检查点之间的所有处理是幂等的,以便它可以重复而不会产生不良影响。
有很多方法可以监控program.rb
的健康状况。最好的方法是使用某种类型的ping,可能是GET /health_check
或通过套接字或管道的虚拟消息。您可以只有一个锁定的文件来检测锁是否仍然存在,或者您可以在启动时记录PID并检查它是否仍然存在。