Зимовка от cron

Я пытаюсь выйти из режима 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.

3
задан 15 June 2016 в 19:06

2 ответа

Это происходит, потому что этому нужны полномочия пользователя root.
решение состоит в том, чтобы добавить быть в спящем режиме команду с помощью sudo crontab -e -u root вместо crontab -e.

polkit необходим для управления питанием как непривилегированный пользователь. Если Вы будете на локальном systemd-logind сеансе пользователя, и никакая другая сессия не активна, то следующие команды будут работать без полномочий пользователя root. Если не (например, потому что другой пользователь зарегистрирован в tty), systemd автоматически попросит у Вас пароля root.

команды Управления питанием:

systemctl reboot|poweroff|suspend|hibernate|hybrid-sleep

Ссылка : https://wiki.archlinux.org/index.php/Systemd#Power_management

3
ответ дан 15 June 2016 в 19:06

Другой ответ является большим! Но это требует корневого крона.

Если Вы хотите быть в спящем режиме от non-sudo крона, существует 2 опции:

1. Используя polkit

Сделайте файл, содержащий следующее:

[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. Используя visudo

Заключение в кавычки отсюда:

Если пользователям нужно только разрешить использовать команды завершения работы, но не иметь другие sudo полномочия, то, как корень, добавляет следующее в конец /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 крон fron для спящего режима.

Примечание: Непосредственно изменение /etc/sudoers плохо; вместо этого сделайте пользовательский sudoers файл под /etc/sudoers.d/ использование команды - sudo visudo -f /etc/sudoers.d/custom.

2
ответ дан 15 June 2016 в 19:06

Другие вопросы по тегам:

Похожие вопросы: