"Crash-proofing" 脚本 vs.using systemd 以保证近乎持续的运行
"Crash-proofing" script vs.using systemd to guarantee near-constant operation
也许这是一个宽泛的问题,但我在其他地方找不到答案,所以就这样吧。
我正在编写的 Python 脚本需要在部署的设备上不断地 运行(在理想情况下,我知道这可能不太可能)。我已经花时间在整个过程中添加 "try...except" 语句,这样,如果出现问题,脚本将恢复并继续工作。
问题是我不确定我能否(也不应该)处理每一个可能抛出的异常。因此,我决定让脚本终止并使用 systemd 重新启动它可能更好。
三个选项:
- 不尝试处理任何异常,只允许 systemd 在它死亡时重新启动它。
- 为每个可能的异常精心创建处理程序,以保证在没有断电、解释器错误或宇宙热寂的情况下,脚本将始终 运行。
- 两者的结合——在某些情况下努力防止崩溃,而在其他情况下允许崩溃并让 systemd 重新启动脚本。
我觉得第三个选择最合理。所以问题是这样的:在"crash-proof"代码之间进行优化并允许systemd崩溃和重启时应该考虑哪些因素?
有关更多特定于应用程序的信息:启动脚本有一个小但明显的开销,主要部分将 运行 每秒 50 到 100 次,而不是 "mission critical"因为在发生故障时不会有 death/damage(只是一些数据丢失),而且我已经预料到网络会出现间歇性问题。
应该处理所有已知的异常情况。任何未定义的行为都是潜在的安全问题。
正如您所建议的,为未知异常做好计划也是明智的。也许还有一个小的内存泄漏也会导致应用程序崩溃,即使它 运行 正确。因此,即使已处理所有预期的故障模式,systemd
在它失败时自动重新启动它仍然是明智的。
也许这是一个宽泛的问题,但我在其他地方找不到答案,所以就这样吧。
我正在编写的 Python 脚本需要在部署的设备上不断地 运行(在理想情况下,我知道这可能不太可能)。我已经花时间在整个过程中添加 "try...except" 语句,这样,如果出现问题,脚本将恢复并继续工作。
问题是我不确定我能否(也不应该)处理每一个可能抛出的异常。因此,我决定让脚本终止并使用 systemd 重新启动它可能更好。
三个选项:
- 不尝试处理任何异常,只允许 systemd 在它死亡时重新启动它。
- 为每个可能的异常精心创建处理程序,以保证在没有断电、解释器错误或宇宙热寂的情况下,脚本将始终 运行。
- 两者的结合——在某些情况下努力防止崩溃,而在其他情况下允许崩溃并让 systemd 重新启动脚本。
我觉得第三个选择最合理。所以问题是这样的:在"crash-proof"代码之间进行优化并允许systemd崩溃和重启时应该考虑哪些因素?
有关更多特定于应用程序的信息:启动脚本有一个小但明显的开销,主要部分将 运行 每秒 50 到 100 次,而不是 "mission critical"因为在发生故障时不会有 death/damage(只是一些数据丢失),而且我已经预料到网络会出现间歇性问题。
应该处理所有已知的异常情况。任何未定义的行为都是潜在的安全问题。
正如您所建议的,为未知异常做好计划也是明智的。也许还有一个小的内存泄漏也会导致应用程序崩溃,即使它 运行 正确。因此,即使已处理所有预期的故障模式,systemd
在它失败时自动重新启动它仍然是明智的。