如何在特定日期时间从终端关闭 Linux?

Ask*_*kar 61 linux shutdown scheduling

似乎我可以sudo shutdown通过指定时间或分钟来关闭使用。

有没有办法指定关闭的日期时间?

ter*_*don 91

您可以直接从 执行此操作shutdown command,请参阅man shutdown

SYNOPSIS
   /sbin/shutdown [-akrhPHfFnc] [-t sec] time [warning message]

[...]

   time   When to shutdown.
Run Code Online (Sandbox Code Playgroud)

因此,例如:

shutdown -h 21:45
Run Code Online (Sandbox Code Playgroud)

这将shutdown -h在 21:45运行。


对于不提供此功能的命令,您可以尝试以下之一:

A. 使用 at

at守护程序是专为在于此。根据您的操作系统,您可能需要安装它。在基于 Debian 的系统上,这可以通过以下方式完成:

sudo apt-get install at
Run Code Online (Sandbox Code Playgroud)

可以通过三种方式向 发出命令at

  1. 管它:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将要运行的命令保存在文本文件中,然后将该文件传递给at

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您还可以at从 STDIN传递命令:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    
    Run Code Online (Sandbox Code Playgroud)

    然后,按CtrlD退出at外壳。该ls命令将在一分钟内运行。

您可以以 的格式给出非常精确的时间[[CC]YY]MMDDhhmm[.ss],如

$ at -t 201403142134.12 < script.sh
Run Code Online (Sandbox Code Playgroud)

这将script.sh在 2014 年 3 月 14 日的 21:34 12 秒运行脚本。

B. 使用 cron(虽然这不是关闭的好主意)

另一种方法是使用cron旨在在特定时间执行任务的调度程序。它通常用于将重复的任务,但您也可以给出特定的时间。每个用户都有自己的“crontab”,用于控制执行哪些作业以及何时执行。crontab 的一般格式是:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)
Run Code Online (Sandbox Code Playgroud)

因此,例如,这将在ls每天 14:04运行:

04 14 * * * ls
Run Code Online (Sandbox Code Playgroud)

要为特定日期设置 cronjob:

  1. 通过运行创建一个新的 crontab crontab -e。这将打开您最喜欢的文本编辑器的窗口。

  2. 将此行添加到刚刚打开的文件中。如果那天是星期五,这个特定示例将在 2014 年 3 月 15 日的 14:34 运行(所以,好吧,它可能会运行不止一次):

    34 14 15 5  /path/to/command        
    
    Run Code Online (Sandbox Code Playgroud)
  3. 保存文件并退出编辑器。

这个SO 答案提出了一种让它只运行一次的方法,但我从未使用过它,所以我不能保证它。

  • @Ouki 我很抱歉,但我没有看到我建议使用 cron 关闭的地方。我在括号中提到它是可能的(它是)但不推荐它。我们倾向于在这里提供全面的答案,这就是为什么我提供了其他替代方案,而从不建议将它们用于“关闭”。不过,我对那次糟糕的经历感到非常不愉快。 (4认同)
  • 使用 cron 安排关机是一个非常糟糕的习惯。突然间,您会想知道为什么服务器每周一早上都停机。 (3认同)
  • 我在这里和 Ouki 在一起。在讨论 `shutdown` 时,不应包括 `cron`。(特别是对于不知道为什么这是一个可怕想法的人。) (3认同)
  • 我有点困惑,这个答案似乎与问题已经假设的信息有关。看起来 OP 知道如何指定关闭时间,但想知道如何指定日期和时间。这在这个答案中得到了解决,但是当它首先被要求时,它被提供为好像它是额外的信息。 (3认同)
  • 这更多是关于建议,因为您在同一个答案中混合了`shutdown`调度和`cron`......无论是工作站还是1000个用户的邮件服务器(我的悲惨经历)更多的是关于坏习惯的后果. (2认同)

nde*_*mou 28

不,您不能在关闭命令中指定日期,但存在两种替代方法:

1)最简单的是使用at 命令。以下示例将shutdown +5在特定时间和日期执行:

echo "shutdown +5" | at 10:05am 2019-01-19
Run Code Online (Sandbox Code Playgroud)

2)如果您不介意使用计算器并希望在 24 小时(24*60=1440 分钟)内关闭,并且您绝对确定系统不会在此期间重新启动:

shutdown -r +1440
Run Code Online (Sandbox Code Playgroud)

  • 我上面回答的原因:terdon 的回答是正确且非常全面但过于健谈(至少恕我直言) (3认同)
  • 如果说健谈,你的意思是有用和全面......你的回答甚至没有解释 `at` 命令。 (3认同)

Ham*_*ava 7

它将在 12:00 关闭您的系统:

$ sudo shutdown -h 12:00
Run Code Online (Sandbox Code Playgroud)

选项:

-h, -P, --poweroff
Run Code Online (Sandbox Code Playgroud)

关闭机器电源。

-r, --reboot
Run Code Online (Sandbox Code Playgroud)

重新启动机器。

-c
Run Code Online (Sandbox Code Playgroud)

取消挂起的关机。

  • 您的方法未显示如何在特定日期关闭... (9认同)