我尝试使用命令从 cron 进入休眠状态systemctl hibernate
。但是,我收到以下错误:
Failed to set wall message, ignoring: Interactive authentication required.
Failed to hibernate system via logind: Interactive authentication required.
Failed to start hibernate.target: Interactive authentication required.
See system logs and 'systemctl status hibernate.target' for details.
如果我从终端手动执行上述命令,它会按预期工作。
我如何从 cron 中休眠?
我正在使用 Ubuntu 16.04。
答案1
发生这种情况是因为它需要 root 权限。解决方案是使用而不是
添加 hibernate 命令。sudo crontab -e -u root
crontab -e
波尔基特是非特权用户进行电源管理所必需的。如果您处于本地 systemd-logind 用户会话中,并且没有其他活动会话,则以下命令无需 root 权限即可运行。如果不是(例如,因为另一个用户登录到 tty),systemd 将自动要求您输入 root 密码。
电源管理命令:
systemctl reboot|poweroff|suspend|hibernate|hybrid-sleep
参考:https://wiki.archlinux.org/index.php/Systemd#Power_management
答案2
另一个答案很棒!但是它需要 root cron。
如果您想从非 sudo cron 休眠,有 2 个选项:
1. 使用波尔基特
创建一个包含以下内容的文件:
[Enable hibernate to be run via cron]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=yes
com.0.enable-hibernation-from-cron.pkla
目录中命名的/etc/polkit-1/localauthority/50-local.d/
。
给出解释这里。
2. 使用维苏多
引自这里:
如果只允许用户使用关机命令,但不允许用户拥有其他 sudo 权限,则以 root 身份将以下内容添加到
/etc/sudoers
使用visudo
命令。user hostname =NOPASSWD: /usr/bin/systemctl poweroff,/usr/bin/systemctl halt,/usr/bin/systemctl reboot
替换
user
您的用户名和hostname
机器的主机名。
现在您的用户可以使用 关闭sudo systemctl poweroff
,并使用 重新启动sudo systemctl reboot
。希望关闭系统的用户也可以使用sudo systemctl halt
。
仅当您不想提示输入密码时才使用 NOPASSWD: 标记。
就我而言,确切的一行是:
anmol ALL=NOPASSWD: /bin/systemctl hibernate
(请注意,您的系统上的位置systemctl
可能有所不同。)
此后,您可以sudo systemctl hibernate
从 cron 写入到 hibernate。
注意:直接修改/etc/sudoers
是坏的;而是在/etc/sudoers.d/
使用命令 - sudo visudo -f /etc/sudoers.d/custom
。
答案3
在 Debian SID 中,这对我有用:
在
/etc/polkit-1/rules.d/cron-suspend.rules
文件中添加:polkit.addRule(function(action, subject) { if (subject.user == "my-user" && (action.id == "org.freedesktop.login1.suspend" || action.id == "org.freedesktop.login1.suspend-multiple-session")) { return polkit.Result.YES; } });
重启服务:
systemctl restart polkit
OBS:如果需要,更改suspend
为。hibernate