Linux 中的延迟内核恐慌
Delayed kernel panic in Linux
对于我们的测试,我们需要通过 SSH 在远程服务器 (VM) 上触发内核恐慌:
ssh server "echo c > /proc/sysrq-trigger"
问题是在大多数情况下 SSH 会话会卡住,因为内核恐慌发生在连接断开之前。有一个通用的连接超时,但这还不够好。
有什么办法可以延迟恐慌吗?
我们尝试将以下内容放入服务器上的文件中:
# - panic.sh -
#/bin/bash
sleep 5
echo c > /proc/sysrq-trigger
然后执行它:
ssh server "nohup panic.sh &"
但这并没有帮助。 SSH 会话一直等到睡眠结束。
发生这种情况是因为您的脚本保持所有管道打开,所以 ssh
必须等待,看看您是否会写更多。
如果您全部关闭它们,ssh
知道它将不再接收任何输出并将退出:
$ time ssh localhost 'sleep 5 < /dev/null > log 2>&1 &'
real 0m0.171s
user 0m0.013s
sys 0m0.003s
您也可以在睡眠前使用 exec
命令在脚本中执行此操作:
exec < /dev/null > log 2>&1
对于我们的测试,我们需要通过 SSH 在远程服务器 (VM) 上触发内核恐慌:
ssh server "echo c > /proc/sysrq-trigger"
问题是在大多数情况下 SSH 会话会卡住,因为内核恐慌发生在连接断开之前。有一个通用的连接超时,但这还不够好。
有什么办法可以延迟恐慌吗?
我们尝试将以下内容放入服务器上的文件中:
# - panic.sh -
#/bin/bash
sleep 5
echo c > /proc/sysrq-trigger
然后执行它:
ssh server "nohup panic.sh &"
但这并没有帮助。 SSH 会话一直等到睡眠结束。
发生这种情况是因为您的脚本保持所有管道打开,所以 ssh
必须等待,看看您是否会写更多。
如果您全部关闭它们,ssh
知道它将不再接收任何输出并将退出:
$ time ssh localhost 'sleep 5 < /dev/null > log 2>&1 &'
real 0m0.171s
user 0m0.013s
sys 0m0.003s
您也可以在睡眠前使用 exec
命令在脚本中执行此操作:
exec < /dev/null > log 2>&1