如何在系统重启后恢复Python脚本?

-8 投票
1 回答
2198 浏览
提问于 2025-05-01 06:15

我需要在重启之前保存脚本的状态,然后在恢复时,从上次停止的地方继续运行脚本。

我的系统是Windows 2012,运行在一台Dell R710服务器上。目前我做了以下几件事:

  1. 在需要重启之前,我保存了步骤编号。用的是pickle库,代码是:pickle.dump( self.boot_flag, open( 'c:\data.pkl', 'wb'))
  2. 然后我用了一条命令“os.system("shutdown -r -t 0 -f")”来重启机器。现在我想问的是,如何把我保存的步骤编号传递过去,这样我的脚本就能从那里继续运行?
暂无标签

1 个回答

2

你面临一系列问题:

  1. 保存状态(包括当前执行的位置),
  2. 检测关机/重启,
  3. 关机后重新启动。

我建议你可以忽略中间那个问题,确保你的应用程序只保留最少量的内部状态,也就是说,把所有数据存储在外部数据库里等等。

补充:确保你可以将状态分成小块进行保存。我写的一个应用程序使用了基于事务的关系型数据库,并在三张表中保存状态。我还有一个系统可以在事后检测错误。使用数据库的好处是它有自己的恢复机制,可以在出现故障时进行修复。

如果你考虑一下需要重新启动的内容,就能确保当你的应用程序重启时,几乎是完全相同的状态。唯一不能做到的可能就是在完全相同的代码行重新开始执行,但实际上这可能不是问题,关键是保持功能的连续性(也就是说,除了时间戳,你无法检测到中断)。

补充:举个例子,我的应用程序每次启动时都会读取数据库,寻找那些没有标记为完成的记录,这样它几乎可以在任何时刻恢复功能。

重启其实很简单,只需编写代码使其能够作为服务运行。

补充:最糟糕的情况其实不是重启或重置——在这些情况下,所有正在运行的进程都会被要求正常关闭,你可以捕捉到这个信号并做一些事情(只要动作快就行)。最糟糕的情况是突然断电/崩溃(比如因为过热),那样你就没有任何警告,也没有机会进行正常关闭。在设计你的应用程序时,你需要考虑最坏的情况会是什么。

撰写回答