2016-09-21 33 views
1

在systemd 中是否存在一个设置,以便在例如后自动重新启动服务 。 24小时?systemd:24小时后自动重启服务?

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

背景:我在长时间运行的Web收集和存储到DB代码中有一个难以识别的缺陷。它可以工作10或20天,然后突然停止,直到我们手动重置。即使过度采伐,我也不知道问题是从哪里来的。当然,我宁愿解决潜在的问题,但是(出于经济原因),暴力破解和重新启动也可能会诀窍。


编辑:我似乎终于找到了真正的缺陷 - 互联网查询,我没有(不能)设置超时(因为read_json功能并没有让该选项)。现在已经通过socket.setdefaulttimeout(...)解决了这个问题 - 我希望能够解决这个不常发生的问题。 感谢您的帮助!

回答

0

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

但是,您必须修补软件才能发出sd_notify事件,因此看门狗知道您的软件仍然存在。

1

所有的

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

一个更加快速和肮脏的方法是建立一个的cron作业杀死的过程中,每24小时重新启动您的服务。

+0

哇,真是太棒了。太感谢了。 “看门狗”,太棒了。将使用它_next time_ ...因为我似乎终于找到了真正的缺陷 - 我无法设置超时的Internet查询,因为read_json函数不允许该选项。现在已经通过socket.setdefaulttimeout(...)解决了这个问题 - 我希望能够解决这个不常发生的问题。但是,非常感谢您的帮助! – AltSheets

0

我想你的要求是一样的,在这个下面的问题。 question on periodic restart of service file

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

+0

非常感谢。 “看门狗”=是,这比定期通知看门狗“我还活着”更容易。将使用_next time_ ...因为我似乎终于找到了真正的缺陷 - 我无法设置超时的Internet查询,因为read_json函数不允许该选项。现在已经通过socket.setdefaulttimeout(...)解决了这个问题 - 我希望能够解决这个不常发生的问题。但是,非常感谢您的帮助! – AltSheets