Jawaban atas pertanyaan ini adalah menukar User=nobody bukan dengan User=ziga tetapi dengan User=root di /etc/systemd/system/battery.service . Entah bagaimana bahkan jika pengguna ziga memiliki semua hak istimewa untuk menggunakan sudo perintah itu tidak dapat mengeksekusi systemctl hibernate di dalam skrip bash. Saya benar-benar tidak tahu mengapa ini terjadi. Jadi file yang berfungsi adalah sebagai berikut:
/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
)
Saya mencobanya dan semuanya berfungsi dengan User=ziga atau User=nobody tapi kita perlu mengubah /usr/bin/systemctl hibernate ke dalam sudo /usr/bin/systemctl hibernate dalam naskah terakhir. Jadi sepertinya User variabel entah bagaimana bahkan tidak masalah ... Oh dan Anda juga dapat menghapus nama absolut dari skrip terakhir dan mengubah baris pertama dari #!/bin/sh ke #!/bin/bash . Saya juga mengubah WantedBy=timers.target ke WantedBy=battery.service di /etc/systemd/system/battery.timer .
Ini dia. Alternatif cron terbaik untuk laptop hibernasi dengan baterai lemah. =)
Mungkin Anda harus mencoba menambahkan start pertama setelah boot, seperti ini:
[Timer]
OnBootSec=15min
OnUnitActiveSec=2m