web-dev-qa-db-ja.com

cronからの休止

コマンド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を使用しています。

3

これは、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

3
user.dz

他の答え 素晴らしい!ただし、ルートcronが必要です。

非Sudo cronから休止状態にする場合、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特権は許可しない場合は、ルートとして、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/sudoersbad ;代わりに、コマンド-/etc/sudoers.d/を使用して、Sudo visudo -f /etc/sudoers.d/customの下にカスタムsudoersファイルを作成します。

2