この質問に対する答えは、 User=nobody
を交換することです User=ziga
ではありません しかし User=root
で /etc/systemd/system/battery.service 内 .どういうわけかユーザー ziga
でも sudo
を使用するすべての権限を持っています コマンド systemctl hibernate
を実行できません bashスクリプトの内部。なぜこれが起こるのか本当にわかりません。したがって、作業ファイルは次のようになります:
/etc/systemd/system/battery.service
[Unit]
Description=Preko skripte preveri stanje baterije in hibernira v kolikor je stanje prenizko
[Service]
Type=oneshot
ExecStart=/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
User=root
Group=systemd-journal
/etc/systemd/system/battery.timer
[Unit]
Description=Periodical checking of battery status every two minutes
[Timer]
OnBootSec=2min
OnUnitActiveSec=2min
[Install]
WantedBy=battery.service
/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
#!/bin/sh
/usr/bin/acpi -b | /usr/bin/awk -F'[,:%]' '{print $2, $3}' | (
read -r status capacity
if [ "$status" = Discharging ] && [ "$capacity" -lt 7 ]; then
/usr/bin/systemctl hibernate
fi
)
試してみましたが、User=ziga
でも動作します または User=nobody
/usr/bin/systemctl hibernate
を変更する必要があります sudo /usr/bin/systemctl hibernate
に 最後のスクリプトで。 User
のように見えます 変数はどういうわけか問題ではありません...ああ、最後のスクリプトから絶対名を削除して、最初の行を #!/bin/sh
から変更することもできます #!/bin/bash
へ . WantedBy=timers.target
も変更しました WantedBy=battery.service
へ /etc/systemd/system/battery.timer 内 .
ほらね。低バッテリでラップトップを休止状態にするための最良の cron 代替手段。 =)
次のように、起動後に最初の起動を追加してみてください:
[Timer]
OnBootSec=15min
OnUnitActiveSec=2m