空闲时关闭 ubuntu 服务器

空闲时关闭 ubuntu 服务器

我在一台旧的 optiplex 上运行着 Ubuntu 服务器 20.04LTS。我想弄清楚如何在闲置一段时间后自动关闭我的服务器。

解决这个问题的最好方法是什么?

[建议的答案只是展示如何从终端关机。根本不相关]

答案1

因此,让我进一步描述我的用例并提供答案

  • 我在家里设置了一台服务器。它用于各种不同的事情,包括 NAS
  • 当我不在家或者不使用它时我不希望它运行。
  • 当我需要时,我会使用局域网唤醒来唤醒它
  • 当空闲时我希望它关闭。

解决方案

  • 使用 systemd 计时器
  • 检查硬盘使用情况
  • 不使用则关闭
  1. 创建 systemd 服务/etc/systemd/system/idle-shutdown.service
[Unit]
description=Idle shutdown service

[Service]
Type=oneshot
Nice=19
IOSchedulingClass=idle
ExecStart=/home/kumudu/idle.sh

  1. 创建 systemd 计时器/etc/systemd/system/idle-check.timer
[Unit]
Description=Idle check timer

[Timer]
# Run hourly
OnCalendar=*:0/15
Persistent=true
Unit=idle-shutdown.service

[Install]
WantedBy=timers.target
  1. 脚本idle.sh。它最初会等待 2 小时。之后会继续检查硬盘使用情况。它检查的磁盘是我拥有所有 samba 共享的磁盘。
#!/bin/bash

RUN_LIMIT_SEC=7200

# How long the machine has been idle for
RUN_TIME_SEC=$(/sbin/runuser -l kumudu -c "awk '{print \$1}' /proc/uptime")
echo "[idle-shutdown] Runtime is $RUN_TIME_SEC" | systemd-cat -p info;
if [ ${RUN_TIME_SEC%.*} -gt $RUN_LIMIT_SEC ] ;
then
     DISK_USAGE1=$(iostat -md -p dm-1 | awk '/dm-1/ {print $2}')
     sleep 10
     DISK_USAGE2=$(iostat -md -p dm-1 | awk '/dm-1/ {print $2}')
     echo "[idle-shutdown] Disk usage is $DISK_USAGE1, $DISK_USAGE2"


     if [ ${DISK_USAGE2%.*} -eq ${DISK_USAGE1%.*} ] && [ ${DISK_USAGE2#*.} \> ${DISK_USAGE1#*.} ] || [ ${DISK_USAGE2%.*} -gt ${DISK_USAGE1%.*} ]; then
          echo "[idle-shutdown] Disk is being used, ignoring shutdown. $DISK_USAGE1, $DISK_USAGE2" | systemd-cat -p info
     else
          echo "[idle-shutdown] Disk is not being used, powering off system. $DISK_USAGE1, $DISK_USAGE2" | systemd-cat -p info
          # /bin/systemctl suspend -i
          # If you prefer to shut down instead of suspend, comment the
          # previous line and uncomment the following one:
          /sbin/poweroff
     fi
fi
  1. 启用计时器sudo systemctl enable --now idle-check.timer

答案2

您可以使用 dconf 关闭服务器。但我不明白您为什么要这样做。如果服务器关闭,您必须先启动它,然后其他人才能再次通过 ssh 访问它。

但仍然有一个可能的解决方案:

dconf write /org/gnome/settings-daemon/plugins/power/sleep-inactive-ac-timeout 120
dconf write /org/gnome/settings-daemon/plugins/power/sleep-inactive-ac-type "shutdown"

这意味着,2分钟不活动(120秒)后,操作将关闭。(替代方案是暂停、休眠、不执行任何操作......)

您仍然应该考虑 WinEunuchs 的答案来实现他所写的脚本。

答案3

在系统设置中,设置服务器在 x 分钟不活动后关闭。

然后使用这个脚本当通过 ssh 登录输入任何内容时伪造服务器活动。

请注意,在 ssh 登录上运行作业并不构成活动。您实际上必须通过 ssh 输入一些内容才能伪造服务器活动。

在服务器关闭前 60、30、15、10、5、3、2 和 1 分钟,会向所有 ssh 用户广播一条警告消息,提示除非输入任何内容,否则服务器将关闭。

答案4

所以我为你找到了一个可能有用的解决方案!#首先你需要下载 Autopoweroff 包

wget https://github.com/deragon/autopoweroff/releases/download/3.0.0/autopoweroff-3.0.0-1.noarch.deb

#然后使用安装

sudo dpkg -i autopoweroff-3.0.0-1.noarch.deb
sudo apt-get install -f

然后,如果您使用 GNOME,只需在活动中查找自动电源关闭,否则转到 /etc/autopoweroff/autopoweroff.conf.dpkg-new 并以 sudo 用户身份修改空闲时间!

如果您使用该文件修改空闲关机设置,以下是我所做的

[NO_SHUTDOWN_TIME_RANGE]
StartHour=
EndHour=


# StartupDelay parameter (expressed in minutes):
#
#   When the computer is booting up, if all the conditions are met and
#   the computer is in the shutdown time range, as soon as Autopoweroff
#   is started, the computer will shutdown.  Thus, the user will never
#   have the chance to boot into the computer.  This is where the
#   "delay" parameter comes in.  If "delay" is set to 15 for example,
#   Autopoweroff will not poweroff the computer even if all the
#   conditions are met, for a period of 15 minutes after the computer
#   has booted.  This allows the user to login and change Autopoweroff's
#   configuration.
#
#
# IdleTime parameter (expressed in minutes):
#
#   Like a screensaver, Autopoweroff detects keyboard and mouse
#   activity, and if there is any activity on the server, it would not
#   be powered off regardless if all the other conditions are met.  If
#   set to 0, user activity on the server will be ignored.

[TIMEOUTS]
StartupDelay=5
IdleTime=30

#Part of the info was obtained here
https://www.ostechnix.com/auto-shutdown-reboot-suspend-hibernate-linux-system-specific-time/

相关内容