コマンドsystemctl hibernate
を使用して、cronから休止状態にしようとしています。ただし、次のエラーが表示されます。
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を使用しています。
これは、root権限が必要なために発生しています。
解決策は、Sudo crontab -e -u root
の代わりにcrontab -e
を使用してhibernateコマンドを追加することです。
polkitは、権限のないユーザーとしての電源管理に必要です。ローカルのsystemd-logindユーザーセッションで、他のセッションがアクティブになっていない場合、次のコマンドはroot権限なしで機能します。そうでない場合(たとえば、別のユーザーがttyにログインしているため)、systemdはrootパスワードを自動的に尋ねます。
電源管理コマンド:
systemctl reboot|poweroff|suspend|hibernate|hybrid-sleep
リファレンス: https://wiki.archlinux.org/index.php/Systemd#Power_management
他の答え 素晴らしい!ただし、ルートcronが必要です。
非Sudo cronから休止状態にする場合、2つのオプションがあります。
次を含むファイルを作成します。
[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/
という名前。
説明があります ここ 。
ここ からの引用:
ユーザーにシャットダウンコマンドの使用のみを許可し、他のSudo特権は許可しない場合は、ルートとして、
visudo
コマンドを使用して/etc/sudoers
の最後に次を追加します。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 cronを休止状態に書き込むことができます。
注:直接変更/etc/sudoers
は bad ;代わりに、コマンド-/etc/sudoers.d/
を使用して、Sudo visudo -f /etc/sudoers.d/custom
の下にカスタムsudoersファイルを作成します。