我想暂停我的笔记本电脑使用at
:
echo "systemctl suspend" | at now + 5 minutes
暂停不会发生,而是我从at
in找到一封邮件/var/spool/mail/me
:
Failed to set wall message, ignoring: Interactive authentication required.
Failed to suspend system via logind: Interactive authentication required.
Failed to start suspend.target: Interactive authentication required.
See system logs and 'systemctl status suspend.target' for details.
好的,运行logind
时需要身份验证。这很有趣,因为当我直接运行时,没有,不需要身份验证并且机器进入暂停状态。at
systemctl suspend
systemctl suspend
at
我已确保使用 执行的命令与at
直接使用echo "echo $(who) > who.txt" | at now
.
怀疑需要身份验证,at
因为它通过/bin/sh
(这是 bash 的别名)运行命令,我systemctl suspend
在启动后执行/bin/sh
:挂起立即发生而无需身份验证,这表明嵌套 shell 不是使用at
.
echo "reboot" | at now
执行和时,我得到相同的行为和非常相似的邮件echo "shutdown now" | at now
。
我的问题是:如何logind
确定它at
试图挂起、重新启动或关闭机器,我怎么知道logind
它应该允许at
在没有身份验证的情况下执行这些命令?
我在 Arch Linux 4.18.1 上,at
版本为 3.1.19。
推测运行的命令
at
在不同的环境中,无法访问您的 tty 设备和 dbus 设置等。Systemd 有自己的
at
命令版本。您可以使用它在似乎可以接受其他 systemd 命令的环境中运行您的命令。所以使用等效的命令:为了在 5 分钟的等待时间内获得完美的准确性,您需要添加 option
--timer-property=AccuracySec=1
。