TCP KeepAlive(套接字选项SO_KEEPALIVE)由三个选项控制——机制触发的时间、探测间隔以及连接被声明中断后失败的探测次数。
它们的默认值是:
在 1¼ 分钟后发送探测听起来很合理,在 9 次探测失败后宣布失败也是如此,但最初2 小时背后的想法是什么?
甚至tcp(7)说
请注意,底层连接跟踪机制和应用程序超时可能要短得多。
启用 keepalive 的主要目的是防止任何有状态的网络元素丢弃状态信息,但这些元素往往会在几分钟内丢弃连接。对于一些限速服务器,curl短片--keepalive-time似乎可以显着提高下载的可靠性。
那么为什么默认值这么长呢?
需要什么才能让 cron 命令访问会话总线(如果它正在运行)?
它曾经对我有用,在 Debian Stretch(测试)上从切换 systemd 直到最近(可能是一两个月前)。奇怪的是,虽然我强烈怀疑这是由 PAM 配置控制的,但/etc/pam.d最近发生的唯一变化是添加了一些pam_selinux对pam.d/systemd-user.
那么我应该寻找什么?