非 0 退出要不要重启
按模型,should_restart("on-failure", 1) 交回什么?
贯穿本节的运维模型(判题机纯 Python、无网,这是它的确定模型,见 spine.py):服务上线后靠日志/指标/健康/告警盯住它。
恢复与重启:should_restart(策略,退出码)(always/on-failure/no)、retries_left、backoff(base,attempt)=base*2**attempt 指数退避、give_up=次数用完。
def should_restart(policy, exit_code):
"""按策略要不要重启:always 总重启;on-failure 非 0 退出才重启;no 不重启。"""
if policy == "always":
return True
if policy == "on-failure":
return exit_code != 0
return False
def retries_left(max_retries, tried):
"""还剩几次重试(不为负)。"""
return max(0, max_retries - tried)
def backoff(base, attempt):
"""指数退避:第 attempt 次等待 base * 2**attempt。"""
return base * (2 ** attempt)
def give_up(max_retries, tried):
"""重试次数用完、该放弃了吗。"""
return tried >= max_retries
print(should_restart("on-failure", 1))
全部评论