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.
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
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:
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 .
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 commandevisudo
._user hostname =NOPASSWD: /usr/bin/systemctl poweroff,/usr/bin/systemctl halt,/usr/bin/systemctl reboot
_Remplacez
user
par votre nom d'utilisateur ethostname
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
_.