我有以下要求:
这些审核日志必须不同。我在玩以下脚本trap.sh
:
export TMOUT=10
function handle-timeout {
echo "Timeout"
}
function handle-exit {
echo "Exit"
}
trap handle-exit EXIT
现在,如果我愿意:
valegon@precision ~ (master) $ bash
valegon@precision ~ (master) $ source trap.sh
valegon@precision ~ (master) $ exit
Exit
它按预期工作。如果相反,我等待超时发生:
valegon@precision ~ (master) $ bash
valegon@precision ~ (master) $ source trap.sh
valegon@precision ~ (master) $ timed out waiting for input: auto-logout
Exit
这里有两个问题:
我该如何解决这些未解决的问题?
与Distinguish between user logout and session expired logout (SSH and web console)相同
我发布的答案与我在此处发布的答案相同。
...
对于具有登录事件的普通会话,您可以在'EXIT'事件上设置陷阱。这将涉及显式注销(CTRL / D或退出),被信号杀死(NOT信号9)以及超时。寻找bash'trap'命令。这些可以在loginn启动脚本(bashrc)中设置
编辑
可以通过选中'$?来获得'TIMEOUT'的指示。在TRAP处理程序中。它将是142,对应于ALRM信号(kill -l 142 = ARLM)。这不是明确的文档,但是与kill -ALRM的默认信号处理程序一致。
function my_trap {
local X=$1
if [ "$X" = "$(kill -l ALRM)" ] ; then
Log Timeout
else
Log Exit/EOF
fi
}
trap 'my_trap $?' EXIT