Ubuntu 服务器的睡眠脚本

Ubuntu 服务器的睡眠脚本

让我们从头开始:我有一个 Pi,当请求到达时它会唤醒我的服务器tcpdump,并且它工作得很好!

我的问题是,当没有传入数据(比如说 30 分钟)时,我希望我的服务器进入休眠状态。服务器仅供我使用,无论是在我的 LAN 内部还是外部。

我认为我需要使用tcpdumpshell 脚本来监视端口或 IP,如果没有传入,它将对其做出反应。我有一个想法,因为我在网上搜索了 2 天,尝试了很多方法,但都没有成功。

我怎样才能做到这一点?

答案1

我假设“没有传入数据”的意思是:tcpdump没有打印任何行。因此我们必须启动一个 30 分钟的计时器,并在tcpdump打印一行时重置它。

启动它相当简单:

sleep 30m && poweroff

我们如何重置它?很简单:我们将sleep其关闭并重新启动。

我们如何检测新行tcpdump?一个好的旧while read -r循环。

把所有内容放在一起:

#!/bin/bash

set -e

shutdown-timer() {
    # Waits 30 minutes and shuts down the computer.
    sleep 30m && poweroff
}

reset-timer() {
    # Kills 'shutdown-timer' (if it's running) and
    # restarts it, saving its PID in 'timerpid'.
    if [[ -n "$timerpid" ]]
    then
        kill "$timerpid" || true
    fi
    shutdown-timer &
    timerpid="$!"
}

# Start the timer for the first time.
reset-timer

tcpdump | while read -r line
do
    # A new packet was sent or received.
    reset-timer
done

请注意,偶尔可能会有干扰数据包。例如,您可能已将 APT 配置为每 5 分钟检查一次更新。这将防止计算机关闭,因为计时器将每 5 分钟重置一次。

tcpdump如果需要,您可以使用或任何工具过滤输出grep,如下所示:

tcpdump | grep -v archive.ubuntu.com | while read -r line

相关内容