この質問に対する答えは、 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