【发布时间】:2021-01-20 03:12:36
【问题描述】:
当我执行exit 命令时,以下 Bash 脚本运行正常。
#!/bin/bash
user=$(echo $(who am i) | awk '{print $1" "$5" "$3" "$4}')
formattedUser=$(echo $user | tr -d '()')
finalData=$formattedUser" to "$(date +"%Y-%m-%d")" "$(date +"%H:%M")
logoutTime=$(date +"%m/%d/%Y %H:%M")":00"
startDate=$(echo $(who am i) | awk '{print $3}')
startDateFinal=$(echo $startDate | tr '-' '/')
startTime=$(echo $(who am i) | awk '{print $4}')
startTimeFinal=$startTime":00"
loginTime=$startDateFinal" "$startTimeFinal
function diff_seconds {
var1=$(date "+%s" -d "$1");
var2=$(date "+%s" -d "$2");
period=$(( $var1 - $var2 ));
}
diff_seconds "$logoutTime" "$loginTime"
periodMins=$(echo $(( period / 60 )))
finalDataToLog=$finalData" "$periodMins
echo $finalDataToLog | tee -a /home/amantha/log-sources/logout.log
chmod 777 /home/amantha/log-sources/logout.log
我在.bashrc 中包含了上面的 bash 脚本。
trap /home/amantha/log-sources/logout.sh EXIT
你可以看到下面的输出。
amantha 192.168.1.36 2020-10-05 10:29 to 2020-10-05 10:31 2
第一个字段 - 用户 第二个字段 - 用户 ip 第三个字段 - 登录日期 第四个字段 - 登录时间 第 5 档 - “到”字 第 6 个字段 - 注销日期 第 7 场 - 登出时间 第 8 个字段 - 时间段
问题是当我关闭终端时它不能正常工作。 输出:
to 2020-10-05 10:28 0
我这样做的目的是确定用户使用 ssh 登录和注销的时间。你有什么解决办法吗? 以上一个仅适用于退出命令。当我关闭终端或连接失败时,它无法正常工作。
【问题讨论】:
-
您可能有兴趣使用文件
~/.bash_logout这是man bash必须说的: 当登录shell 退出时,bash 从文件中读取并执行命令 ~/.bash_logout和 /etc/bash.bash_logout,如果文件存在。 -
@kvantour :虽然这肯定比使用 EXIT 陷阱 更有意义,但 OP 希望在 关闭终端时执行脚本我>。我认为 bash 不会通过优雅的注销来处理。相反,它会被一些信号杀死。
-
@Amantha :要使其工作,您需要在关闭终端时捕获终端发送到 bash 的信号。
标签: bash shell ubuntu ssh terminal