我有一台由 Watchdog 监控的服务器,由于网络硬件故障(目前我无法更换)偶尔会重新启动。据我所知,Watchdog 向所有进程发送 SIGTERM,请求安全关闭,并在短时间后发送 SIGKILL,这将立即停止进程。但是,在这种情况下,它会导致数据损坏,因为重要的主进程尚未完全关闭并且有未写入的数据。
Watchdog 在要求所有进程停止和强制它们停止之间需要多长时间的暂停?它是在 Watchdog 中硬连线的,在 watchdog.conf 中设置的(如果是,它从未在手册页中记录),还是与其他系统设置相同?我如何更改此设置?
编辑:我发现了超时,但我仍在寻找有关如何重建和正确集成系统的说明。
答案1
Sourceforge 上的官方 5.15 版本现已包含此选项。可以在文件 watchdog.conf 中使用以下行进行配置:
sigterm 延迟 = 5
(在示例文件中注释掉)。请注意,实验性的“V6”版本不应再使用,因为 5.15 几乎具有其所有功能,并且还修复了一些错误。还请注意,由于 NERC 资金的撤回,“sat”网站可能会在 2019 年晚些时候关闭。
答案2
从Watchdog 源代码,shutdown.c
第 445 行,暂停时间被硬连线到 Watchdog 中,为五秒钟。
答案3
我在这里发布了一些有关构建、配置和测试 Linux 看门狗守护进程的信息:
http://www.sat.dundee.ac.uk/~psc/watchdog/Linux-Watchdog.html
简短的回答是您需要配置您的系统来构建该项目:
sudo apt-get build-dep watchdog
sudo apt-get install build-essential automake libtool
然后获取源代码,您可能已经拥有它,但最新的可以通过以下步骤完成:
sudo apt-get install git
git clone git://git.code.sf.net/p/watchdog/code watchdog-code
移动到代码目录并准备编译:
cd watchdog-code
autoreconf -i
./configure
然后到源码目录,并编译:
cd src
make clean
make
在当前目录中,您将获得新的二进制文件。使用 测试它们,然后“上线” sudo make install
,或者至少备份系统提供的程序。由于调试符号,它们与系统程序相比显得臃肿,如果您想减小它们的大小,可以使用 strip 命令。
你能说一下 SIGTERM 工作需要多长时间吗?
编辑后添加:
如果您使用的是当前 GIT pull(2013 年 9 月 14 日),则编辑 shutdown.c 并在第 363 行将“safe_sleep(4);”更改为您想要的超时值(以秒为单位)。如果编辑系统提供的看门狗的代码(如上所述),请注意不要让 sleep() 超过硬件超时时间(通常为 60 秒),因为系统只会重新启动!这就是 safe_sleep() 函数的原因,在等待期间保持看门狗的供给。