如何注销工作日登录的用户?

Bash

1 前言

一个问题,一篇文章,一出故事。
今天有个使坏需求,让小孩工作日玩不了电脑。

2 最佳实践

2.1.1 创建脚本

vim ~/scripts/monitorUser.sh

加入如下内容,

#!/bin/bash

# 要监控的用户列表,用空格分隔(驼峰式命名)
targetUsers="will"

# 获取当前星期几
currentDay=$(date +%w)

for targetUser in $targetUsers; do
    if w -h | grep -q "^${targetUser}\s"; then
        if [ "$currentDay" -ge 1 ] && [ "$currentDay" -le 5 ]; then
            echo "$(date): 工作日禁止 ${targetUser} 用户登录,系统将自动注销..."

            userSessions=$(w -h | grep "gnome-session-binary" | awk '{print $2}')

            for session in $userSessions; do
                echo "正在注销 ${targetUser} 用户的会话: $session"
                echo pkill -KILL -t "$session"
            done

            pkill -KILL -u "$targetUser" 2>/dev/null

        else
            echo "$(date): 周末允许 ${targetUser} 用户使用"
        fi
    fi
done

2.2 创建脚本触发

crontab -e

加入如下内容,

*/5 * * * * bash ~/scripts/monitorUser.sh
没有评论

发表回复

Bash
如何去掉文件路径的部分?

1 前言 一个问题,一篇文章,一出故事。 笔者今天需要实现去掉一部分文件的路径,将其变成相对路径。 …

Bash
如何根据条件输出MySQL表Insert行?

1 前言 一个问题,一篇文章,一出故事。 笔者执行NextCloud的维护任务,需要从数据表中删除用 …

Bash
如何函数代替Base Shell的命令别名?

1 前言 一个问题,一篇文章,一出故事。 之前的章节我们使用命令别名来缩写输入的命令,相见如下, 如 …