在我的vps中,我已经运行了4个Python脚本,已经60天了,我不重新启动我的vps,现在必须这样做,但是如果我重新启动vps,我的python变量和数据将被删除,因为我不存储它们在文件中,并存储在python脚本的变量中。 我的操作系统是Ubuntu Server 16.04 LTS,我使用nohup命令运行了python代码,直到它们可以在后台运行。 现在,我需要一种方法来停止我的脚本而不删除它们的变量,并在重新启动vps之后以相同的变量和数据启动它们。 有什么办法可以做到吗? 另外,很抱歉在我的问题中写错了。
答案 0 :(得分:1)
Python没有提供任何方法。
但是您也许可以使用CRIU或类似的工具来冻结和快照解释器过程。然后,重新启动后,您可以将快照恢复到一个新的过程中,该过程将恰好从您上次中断的地方开始。
它可能不起作用。 1 但是很有可能。这与CRIU文档中的Live Migration基本相同,只是您不迁移到新计算机/容器/等,而只是迁移到同一台计算机的未来。因此,从该页面开始阅读,然后点击那里的链接。
您可能应该先进行测试,然后再提交。
*在不做任何重要事情(也许增加计数器,打印出来,睡一秒钟,重复)的Python脚本上尝试一下(显然不包括系统重启,只是kill -9
可执行文件)。
*也许可以在脚本上尝试一下,该脚本可以执行与您正在执行的操作类似的操作。
*如果可以安全地同时运行一个程序的两个副本(它们不会使彼此陷入写入同一文件,争用同一套接字或其他冲突的情况),那么请重新开始复制并测试转储/杀死/恢复。
*在您的真实进程之一上尝试它,而无需重启。
*尝试全部四个。
*用手指交叉,牺牲一只鸡,然后真正地做。
如果没有成功,我唯一想到的选择就是遍历脚本,手动找出需要保存的所有内容以及如何从顶级全局变量进行访问,然后执行此操作在调试器中。
理想情况下,您将编写一个脚本,该脚本将自动访问和保存所有内容,另外还有一个脚本可在重新启动时将其提供给新实例。然后,您只需pdb
实时解释器并开始转储所有内容。
这肯定会做很多工作,而且不会带来太多乐趣。从好的方面来说,如果做对了,就可以保证正常工作。第三,不正确很容易做到。
1。如果您依靠打开的文件,管道,套接字等,CRIU的工作量将达到您的预期,这比起初可能要多,但仍然不是您可能想要的一切……此外,如果您正在使用几乎所有RAM,都很难将它们恢复为完全相同的状态。可能还有其他可能的问题。