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


46

看来我可以sudo shutdown通过指定时间或分钟来关机。

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

Answers:


77

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

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

[...]

   time   When to shutdown.

因此,例如:

shutdown -h 21:45

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


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

A.在使用

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

sudo apt-get install at

可以通过以下三种方式来命令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
    
  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
    
  3. 您还可以at从STDIN 传递命令:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

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

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

$ at -t 201403142134.12 < script.sh

这将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)

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

04 14 * * * ls

要为特定日期设置cronjob,请执行以下操作:

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

  2. 将此行添加到刚打开的文件中。如果该天是星期五,则此示例将在2014年3月15日14:34运行(因此,可以运行多次):

    34 14 15 5  /path/to/command        
    
  3. 保存文件并退出编辑器。

这样的答案提出了一种方法,使其只能运行一次,但我从未使用过,因此无法担保。


2
使用cron安排关机确实是个坏习惯。突然之间,您会想知道为什么每个星期一早上服务器都会关闭。
Ouki 2014年

4
@Ouki对不起,但是我看不到我建议使用cron关机的位置。我在括号中提到有可能(确实),但不建议这样做。我们倾向于在这里喜欢综合性的答案,这就是为什么我提供其他替代方案却从未暗示过应该使用它们的原因shutdown。不过,我对那种糟糕的经历感到不愉快。
terdon

2
这更多地是关于建议的,因为您正在混合shutdown日程安排并且cron答案是相同的...无论是工作站还是1000个用户的邮件服务器(我的悲伤经历)更多地是关于不良习惯的后果。
Ouki 2014年

3
我在和Ouki在一起。在讨论时shutdown,不应包括在内cron。(特别是和一个不知道为什么这是一个可怕的主意的人。)
Ricky Beam

2
我有点困惑,这个答案似乎是由问题已经假定的信息导致的。看起来OP知道如何指定关闭时间,但想知道如何同时指定日期和时间。在此答案中已解决了该问题,但当它最初是要提供的内容时,就好像是多余的信息一样提供。
2014年

24

不,您不能在shutdown命令中指定日期,但是有两种选择:

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

echo "shutdown +5" | at 10:05am 2019-01-19

2)如果您不介意使用计算器并想在24小时内关闭(24 * 60 = 1440分钟),并且您完全确定系统不会在以下时间之间重新启动:

shutdown -r +1440

2
我在上面回答的原因:terdon的回答是正确且非常全面,但过于健谈(至少恕我直言)
ndemou 2014年

2
如果用闲谈来表示您是有益而全面的...您的答案甚至都没有解释at命令。
安东尼

@Anthony我相信这种使用方式不at值得解释。我可以看到您相信其他情况。不同的思想,不同的看法。
ndemou,2016年

这个答案不再正确。van Smoorenburg,Upstart和systemd shutdown命令不允许指定日期。但是,nosh工具集shutdown支持长期的BSD语法。
JdeBP

@JdeBP:您认为这两种选择中的哪一种不再适用,并且您已经测试并验证了它们是否不正确?我刚刚在3个系统(Ubuntu 18.04、16.04和CentOS 7)中测试了这两个命令,它们工作正常。关于您的其余评论(“范·斯莫伦堡...”),我不确定这是否是对您的说法的澄清,即该答案不再是正确的或是一般性评论。也许您应该发布更多信息的答案。
ndemou

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.