Linux服务器运行60分钟后如何关闭?

Linux服务器运行60分钟后如何关闭?

我有一台服务器,出于安全原因,它通常会关闭。当我想要处理它时,我会打开它,执行我的任务,然后再次关闭它。我的任务通常不会超过 15 分钟。我想实现一个60分钟后自动关闭的机制。

我研究了如何使用 cron 来执行此操作,但我认为这不是正确的方法,因为 cron 没有考虑服务器上次打开的时间。我只能设置周期性模式,但他们不会考虑这些数据。

我该如何执行此实施?

答案1

有几种选择。

  • 直接提供时间shutdown -P

    shutdown -P +60
    

    注意shutdown 手册页还指出:

    如果使用时间参数,则在系统关闭前 5 分钟创建 /run/nologin 文件以确保不允许进一步登录。

  • 使用at命令。

  • 创建一个系统单元文件或者初始化脚本shutdown -P 60在启动时运行。

  • 使用 cron 的@reboot启动后运行命令。

    添加到(根)crontab:

    @reboot shutdown -P +60
    

对于后两种方法,您还可以使用sleep 3600 && shutdown -P now而不是使用时间参数来shutdown延迟关闭 60 分钟。这样,在关闭之前的最后一刻都可以登录。

答案2

这看起来像一个XY问题

我的任务通常不会超过 15 分钟。我想实现一个60分钟后自动关闭的机制。

如果您在 60 分钟后关闭,则可能会遇到一个特别复杂的问题,并且需要更多时间。以前的许多解决方案并不容易延迟关闭。

如果任务不是交互式任务,而是从另一台机器自动触发的脚本任务,@sdkks 给出一个很好的解决方案为此;您实际上应该只是让机器在脚本及其所有任务完成后立即运行关机。

但是,如果您的任务是交互式任务,我建议改为进行空闲检测。

如果您在 GUI (X11) 中执行任务,您可以使用此处描述的方法检测空闲 GUI 会话:系统空闲时和再次活动时运行命令

如果您通过终端执行该任务,则可以使用该who命令检测登录的用户。您可以设置一个 cronjob,如果who返回空结果则关闭机器。请注意,这将是一种相当保守的方法;如果您让控制台处于连接状态但处于闲置状态,它不会关闭系统。

如果您想更积极一点并断开空闲终端会话,您可以将前面的方法与自动断开空闲的 SSH 会话 ClientAliveIntervalClientAliveCountMax。如果您没有 SSH,但有本地终端会话,另一种方法是使用终端闲置的命令返回的时间w

答案3

如果您每次都以同一用户身份执行任务,则只需将 shutdown 命令(可选地使用选项 -P)添加到您的配置文件中即可。该数字代表关闭命令延迟的分钟数。确保您的用户能够在没有密码的情况下通过 sudo 执行关闭命令。

echo "sudo shutdown -P +60" >> ~/.profile

添加:

在阅读了大多数其他答案后,我喜欢在(根)cron 中添加“@reboot /<脚本/命令的路径>”的选项。 Sebasth给出的答案是他的第四个选择。您可以添加关闭命令或编写一个执行关闭的小脚本并通过 cron 执行。如果您使用 systemd,WoJ 也有一个很好的解决方案。

答案4

以下命令command使用参数运行,如果成功完成,它将立即关闭该框(假设用户可以运行)poweroff。可能需要使用sudo poweroff.

command --parameters && poweroff

而以下命令只是poweroff在命令终止时立即运行:

command --parameters ; poweroff

如果您认为命令完成后需要休息时间,请运行

command --parameters ; sleep 3600 ; poweroff

如果您认为该命令可能会超时运行,您可以将其限制为一个小时:

timeout 1h command --parameters ; poweroff

timeout是软件包的一部分coreutils,因此您可能已经拥有它。

相关内容