systemd:如何检查延迟关机的预定时间?

KIA*_*aze 20 shutdown systemd

shutdown -h TIME/+DELAY有时喜欢用。然而,自从切换到 systemd(在 Ubuntu 上)之后,事情似乎发生了很大的变化。

除了先前的关闭命令不再阻止运行新命令这一事实之外,我无法弄清楚如何检查当前关闭过程的计划关闭时间。

我以前只是跑来ps aux | grep shutdown看看计划的关机时间。

现在使用 systemd 它只显示如下内容:

root      5863  0.0  0.0  13300  1988 ?        Ss   09:04   0:00 /lib/systemd/systemd-shutdownd
Run Code Online (Sandbox Code Playgroud)

如何检查此类进程的预定关闭时间?

我试过了shutdown -k,但不是只写墙消息,它似乎还将预定关闭时间更改为 now+1 分钟。

Evg*_*gin 13

man shutdown(8)说:

第一个参数可能是一个时间字符串(通常是“现在”)。

时间字符串可以采用“hh:mm”格式,表示小时/分钟,指定执行关机的时间,以 24 小时时钟格式指定。或者,它可以在语法“+m”中表示从现在开始的指定分钟数。“now”是“+0”的别名,即触发立即关闭。如果未指定时间参数,则隐含“+1”。

尝试:

# shutdown +5
# systemctl status systemd-shutdownd.service
Run Code Online (Sandbox Code Playgroud)

您应该会看到如下内容:

? systemd-shutdownd.service - Delayed Shutdown Service
Loaded: loaded (/lib/systemd/system/systemd-shutdownd.service; static; vendor preset: enabled)
Active: active (running) since Tue 2015-09-15 09:13:11 UTC; 12s ago
Docs: man:systemd-shutdownd.service(8)
Main PID: 965 (systemd-shutdow)
Status: "Shutting down at Tue 2015-09-15 09:18:11 UTC (poweroff)..."
CGroup: /system.slice/systemd-shutdownd.service
       ??965 /lib/systemd/systemd-shutdownd
Run Code Online (Sandbox Code Playgroud)

StatusShutting down at Tue 2015-09-15 09:18:11 UTC (poweroff)...

  • `systemd-shutdownd` 已于 2015 年 5 月从 systemd 中删除。 (7认同)

Del*_*tev 10

# cat /run/systemd/shutdown/scheduled
USEC=1537242600000000
WARN_WALL=1
MODE=poweroff
Run Code Online (Sandbox Code Playgroud)

USEC 是一个具有微秒精度的 Unix 纪元时间戳,因此:

if [ -f /run/systemd/shutdown/scheduled ]; then
  perl -wne 'm/^USEC=(\d+)\d{6}$/ and printf("Shutting down at: %s\n", scalar localtime $1)' < /run/systemd/shutdown/scheduled
fi
Run Code Online (Sandbox Code Playgroud)

将显示如下内容:

Shutting down at: Tue Sep 18 03:50:00 2018
Run Code Online (Sandbox Code Playgroud)

Systemd版本是232-25 + deb9u4 Debian的弹力运行。


jam*_*coe 9

最简单的:(在 Debian/Ubuntu 上工作)

date --date @$(head -1 /run/systemd/shutdown/scheduled |cut -c6-15)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。我发现 systemctl 方法更直观,但由于它停止工作,这似乎是较新系统最简单的解决方案。(刚刚在 Kubuntu 20.04 上测试过)我现在应该接受你的答案吗?无论哪种方式,它都适合现在可能需要它的人。:) (2认同)

小智 7

对于较新的 linux 发行版,您可能需要执行以下操作:

busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager ScheduledShutdown

关机的工作方式发生了变化

尝试过: - Debian Stretch 9.6 - Ubuntu 18.04.1 LTS

参考

  • 输出将关闭时间指定为自 Unix 纪元以来的微秒。要获得人类可读的时间:`date -d @$(( $(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager ScheduledShutdown | cut -d' ' -f3) / 1000000 ))` (3认同)