我有以下要求:
当用户终止bash会话时,
时,
这些审计日志必须不同。我正在使用下面的脚本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这里有两个问题:
我怎样才能解决这些悬而未决的问题?
发布于 2019-10-22 18:58:36
第二次尝试
基于反馈,以前在出口处使用陷阱的解决方案不能很好地工作。基于使用PROMPT_COMMAND的替代方案似乎提供了更好的里程。
基本逻辑:
在“退出”事件中,检查(现在开始)> TMOUT
#! /bin/bash
function pre_cmd {
START=$SECONDS
}
function log_exit {
if [ "$((SECONDS-START-TMOUT))" -ge 0 ] ; then
echo "TIMEOUT"
else
echo "Normal Exit"
fi
}
TMOUT=15
PROMPT_COMMAND=pre_cmd
trap 'log_exit' EXIT发布于 2019-10-22 12:45:56
与Distinguish between user logout and session expired logout (SSH and web console)相同
我发的答案和我在那里发的一样。
..。
对于具有登录事件的普通会话,您可以在“退出”事件上设置一个陷阱。这将包括显式注销(CTRL/D,或exit)、被信号杀死的gettng (不是信号9)和超时。找巴什“陷阱”命令。它们可以在loginn启动脚本(bashrc)中设置。
编辑
通过检查“$?”可以获得“超时”的指示。在陷阱处理程序中。它将是142个对应于ALRM信号(杀死-l 142=ARLM)。这不是显式文档,但与杀死-ALRM的默认信号处理程序一致。
function my_trap {
local X=$1
if [ "$X" = "$(kill -l ALRM)" ] ; then
Log Timeout
else
Log Exit/EOF
fi
}
trap 'my_trap $?' EXIThttps://stackoverflow.com/questions/58502915
复制相似问题