在特定日期关闭

HdM*_*oad 12 shutdown ubuntu

我知道您可以通过安排在特定时间关闭,shutdown -h 21:45并且您不应该将 crontab 用于此类事情,因为它们具有重复性。如何安排特定日期(例如 8 月 31 日晚上 20:00)关闭?

Ste*_*ris 12

at命令用于安排一次关闭未来的执行。

例如

% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019
Run Code Online (Sandbox Code Playgroud)

(“<EOT>”是通过按下 control-D 产生的)

% atq
161     Sat Aug 31 20:00:00 2019 a sweh
Run Code Online (Sandbox Code Playgroud)

你可以把你的shutdown命令放在这里。


CSM*_*CSM 8

虽然这at是执行此操作的明显方法,但我认为它会在关机后幸免于难,因此如果机器在预定关机之前重新启动,它可能会在预定时间再次关机。因此,使用 bash 和 GNU date 我们可以使用延迟关闭。

/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))

注意:这仅精确到一分钟。它的工作原理是将预定时间和现在转换为自 UNIX 时代以来的秒数,计算差异,转换为分钟,然后将其用作关闭延迟。如果预定时间在过去,它将无法正常工作。


HBr*_*ijn 7

最近的 Ubuntu 版本使用 systemd,并且当一次性命令的常规atd和关联at调度程序未安装或未运行一次性命令时,可以使用systemd-run进行调度,这比手动生成一个更容易systemd timer

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
Run Code Online (Sandbox Code Playgroud)

  • 具有讽刺意味的是,启动整个服务来做到这一点几乎是多余的。systemd 的关闭机制本身支持任意时间点。它的命令行工具根本不提供访问它的能力,因为它与 BSD `shutdown` 的命令行不符。正如我在另一个答案中所写的那样,想要这样做的您可以尝试说服 systemd 人员使他们的“关闭”工具功能更强大,使用数十年的语法,而不是使用“systemd-run”四处走动。 (2认同)