【问题标题】:systemd: automatically restart service after 24 hours? [duplicate]systemd:24小时后自动重启服务? [复制]
【发布时间】:2017-01-29 23:46:59
【问题描述】:

systemd中是否有设置 自动重启服务 例如之后24 小时?

或者实现这种功能的最佳解决方法是什么?

背景:我的长期运行的网络收集和存储到数据库代码中有一个难以识别的缺陷。它确实工作了 10 或 20 天,然后突然停止,直到我们手动重置它。即使是过多的日志记录也让我不知道问题到底出在哪里。当然,我更愿意解决根本问题,但是(出于经济原因)蛮力杀死并重新启动可能也可以解决问题。


编辑:我似乎终于找到了真正的缺陷——我没有(不能)设置超时的互联网查询(因为 read_json 函数不允许该选项)。现在已经通过 socket.setdefaulttimeout(...) 解决了它 - 我希望这将解决这个不常见的停止问题本身。 谢谢你的帮助!

【问题讨论】:

    标签: linux restart systemd


    【解决方案1】:

    Systemd 具有内置的看门狗功能,请参阅此link 了解更多信息。

    但是,您必须修补您的软件以发送 sd_notify 事件,以便看门狗知道您的软件仍然存在。

    来自1

    首先,要使软件看门狗可监督,它需要 修补以在其定期发送“我还活着”的信号 事件循环。修补这个相对容易。首先,守护进程需要 读取 WATCHDOG_USEC= 环境变量。如果设置,它将 包含格式为 ASCII 文本字符串的 usec 中的看门狗间隔, 因为它是为服务配置的。然后守护进程应该发出 sd_notify("WATCHDOG=1") 每隔一半的时间间隔调用一次。一个守护进程 以这种方式修补应该透明地支持看门狗功能 通过检查是否设置了环境变量并遵守 它设置的值。

    更快速和肮脏的方法是设置一个 cron-job,它每 24 小时终止一次进程并重新启动您的服务。

    【讨论】:

    • 哇,这真是太棒了。太感谢了。 “看门狗”,太棒了。 下次 将使用它...因为我似乎终于找到了真正的缺陷 - 一个我无法设置超时的 Internet 查询,因为 read_json 函数不允许该选项。现在已经通过 socket.setdefaulttimeout(...) 解决了它 - 我希望这将解决这个不常见的停止问题本身。不过谢谢谢谢你的帮助!
    【解决方案2】:

    我想您的要求与以下问题相同。 question on periodic restart of service file

    我希望这能回答你的问题。

    【讨论】:

    • 谢谢一百万。 “WatchdogSec” = 是的,这比定期通知看门狗“我还活着”还要容易。 下一次 将使用该选项...因为我似乎终于找到了真正的缺陷 - 一个我无法设置超时的 Internet 查询,因为 read_json 函数不允许该选项。现在已经通过 socket.setdefaulttimeout(...) 解决了它 - 我希望这将解决这个不常见的停止问题本身。不过谢谢谢谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2020-05-11
    • 1970-01-01
    • 2011-04-12
    • 2017-05-07
    • 2021-01-08
    相关资源
    最近更新 更多