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