检查用户是否登录、检查条件、在设定的时间自动关机

检查用户是否登录、检查条件、在设定的时间自动关机

首先是情况:

我有一台服务器,我想让它在晚上 (00:00) 自动关闭,但我需要确保没有人通过 ssh 登录。如果是,那么我将允许最多再等待一个小时进行第二次关闭尝试 (01:00),此时服务器无论如何都会关闭。

我想我可以使用 cron 作业来关机(除非有更好的方法来安排关机),但不知道在第一种情况下如何实施检查。

额外的:

有没有办法知道用户是否正在使用其 Samba 共享,在这种情况下,不会完成关机程序。或者更好的办法是,检查是否有足够数量的磁盘 I/O,否则也不会完成关机。

我已经看到了一些可以帮助我的答案,所以我希望具体地知道,完成整个任务的最佳方法是什么,而不需要破解不同的部分。

答案1

您可以使用以下方法检查活动连接:

netstat -an | grep ESTABLISHED | grep ":[portname] " | wc -l
  • 端口 22 用于 ssh 连接。
  • 端口 445 用于 samba 连接。

因此将其添加到 bash 脚本并将 bash 脚本添加到 cronjob。

  1. 创建一个 cronjob:

    sudo su
    crontab -e
    

    插入如下内容,在 24:00 进行检查并在 01:00 强制关机:

    # Check for shutdown system at 24:00 every day
    00 0 * * * /usr/bin/shutdown_script
    # Shutdown at 01:00 every day
    00 1 * * * /usr/bin/shutdown -h now
    
  2. 创建脚本(仍然以 root 身份;)):

    gedit /usr/bin/shutdown_script
    

    并添加您想要检查的命令:

    #!/bin/bash
    users_ssh=`netstat -an | grep ESTABLISHED | grep ':[445] ' | wc -l`
    users_ssh_alertvalue="0"
    if [ "$users_ssh" -eq "$users_ssh_alertvalue" ]; then
         /sbin/shutdown -h now
    fi 
    

    当然,让它可执行。

您可以通过添加更多选项来使它更加完善,if您需要做的就是找到正确的命令来查找要检查的值。不过,我还没有找到一个不错的 I/O 检查(iostat看起来iotop很有希望)。

编辑:在寻找 I/O 检查命令时,我发现了mpstat。它报告与处理器相关的统计数据(请参阅man mpstat)。CPU 空闲时间来自mpstat

mpstat | grep all | sed -s 's/.* all// ; s/ * / /g' | cut -d ' ' -f10

因此,您可以添加此功能,并在 CPU 空闲时间高于 98% 时关闭。

相关内容