web-dev-qa-db-fra.com

Hibernation de cron

J'essaye d'hiberner de cron en utilisant la commande systemctl hibernate. Cependant, j'obtiens l'erreur suivante:

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.

Si j'exécute manuellement la commande ci-dessus à partir d'un terminal, cela fonctionne comme prévu.

Comment puis-je hiberner de cron?

J'utilise Ubuntu 16.04.

3
Anmol Singh Jaggi

Cela se produit car il nécessite des privilèges root.
La solution consiste à ajouter la commande hibernate en utilisant Sudo crontab -e -u root au lieu de crontab -e.

polkit est nécessaire à la gestion de l'alimentation en tant qu'utilisateur non privilégié. Si vous êtes dans une session utilisateur locale systemd-logind et qu'aucune autre session n'est active, les commandes suivantes fonctionneront sans privilèges root. Si ce n'est pas le cas (par exemple, lorsqu'un autre utilisateur est connecté à un tty), systemd vous demandera automatiquement le mot de passe root.

Commandes de gestion de l'alimentation:

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

Référence : https://wiki.archlinux.org/index.php/Systemd#Power_management

3
user.dz

L'autre réponse c'est génial! Mais cela nécessite un root cron.

Si vous souhaitez passer en hibernation à partir de cron non-Sudo, il existe 2 options:

1. Utiliser polkit

Créez un fichier contenant les éléments suivants:

_[Enable hibernate to be run via cron]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=yes 
_

nommé _com.0.enable-hibernation-from-cron.pkla_ dans le répertoire _/etc/polkit-1/localauthority/50-local.d/_.

L'explication est donnée ici .

2. Utilisation de visudo

Citant de ici :

Si les utilisateurs doivent uniquement être autorisés à utiliser les commandes d'arrêt sans disposer d'autres privilèges Sudo, alors, en tant que root, ajoutez les éléments suivants à la fin de /etc/sudoers en utilisant la commande visudo.

_user hostname =NOPASSWD: /usr/bin/systemctl poweroff,/usr/bin/systemctl halt,/usr/bin/systemctl reboot
_

Remplacez user par votre nom d'utilisateur et hostname par le nom d'hôte de la machine.
Votre utilisateur peut maintenant s’arrêter avec _Sudo systemctl poweroff_ et redémarrer avec _Sudo systemctl reboot_. Les utilisateurs souhaitant mettre un système hors tension peuvent également utiliser _Sudo systemctl halt_.
Utilisez la balise NOPASSWD: uniquement si vous ne souhaitez pas que votre mot de passe vous soit demandé.

Dans mon cas, la ligne exacte est:

_anmol ALL=NOPASSWD: /bin/systemctl hibernate  
_

(Notez que l'emplacement de systemctl peut être différent sur votre système.)

Après cela, vous pouvez écrire _Sudo systemctl hibernate_ fron cron pour mettre en veille prolongée.

Remarque: Modifier directement /etc/sudoers est mauvais ; créez à la place un fichier personnalisé sudoers sous /etc/sudoers.d/ à l’aide de la commande - _Sudo visudo -f /etc/sudoers.d/custom_.

2
Anmol Singh Jaggi