Ich arbeite unter Arch Linux und versuche, einen System-Timer als Alternative für den Ruhezustand meines Laptops bei schwachem Akku zu erstellen. Also habe ich diese drei Dateien geschrieben:
/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=nobody
Group=systemd-journal
/etc/systemd/system/battery.timer
[Unit]
Description=Periodical checking of battery status every two minutes
[Timer]
OnUnitActiveSec=2min
[Install]
WantedBy=timers.target
/ 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 50 ]; then
/usr/bin/systemctl hibernate
fi
)
Und dann, um den Timer zu aktivieren, habe ich ausgeführt:
sudo systemctl enable battery.timer
sudo systemctl start battery.timer
Und irgendwie funktioniert es nicht. Das Skript funktioniert von selbst. Dies bedeutet, dass mein Computer in den Ruhezustand wechselt, wenn ich den folgenden Befehl ausführe.
/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
ADD1:
Nachdem ich den Timer aktiviert und gestartet habe, habe ich einige Überprüfungen durchgeführt und Folgendes bekomme ich:
[ziga@ziga-laptop ~]$ systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
n/a n/a n/a n/a battery.timer battery.serv
Tue 2016-06-28 00:00:00 CEST 42min left Mon 2016-06-27 00:01:54 CEST 23h ago logrotate.timer logrotate.se
Tue 2016-06-28 00:00:00 CEST 42min left Mon 2016-06-27 00:01:54 CEST 23h ago shadow.timer shadow.servi
Tue 2016-06-28 00:00:00 CEST 42min left Mon 2016-06-27 00:01:54 CEST 23h ago updatedb.timer updatedb.ser
Tue 2016-06-28 22:53:58 CEST 23h left Mon 2016-06-27 22:53:58 CEST 23min ago systemd-tmpfiles-clean.timer systemd-tmpf
und
[ziga@ziga-laptop ~]$ systemctl | grep battery
battery.timer loaded active elapsed Periodical checking of battery status every two minutes
ADD2:
Nach dem Anwenden der Lösung von Alexander T startet mein Timer (siehe Code unten), aber das Skript hält meinen Laptop nicht in den Ruhezustand, während es in den Ruhezustand versetzt wird, wenn ich ihn direkt ausführe.
[ziga@ziga-laptop ~]$ systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Tue 2016-06-28 19:17:30 CEST 1min 43s left Tue 2016-06-28 19:15:30 CEST 16s ago battery.timer battery.service
nobody
Benutzer oder als Ziga (ich verstehe/home/ziga
)? Benutzer niemand hat möglicherweise nicht genügend Berechtigungen . Wenn Sie sagen, dass es nicht funktioniert , wie weit kommt es?ziga
aber es funktioniert nicht.WantedBy=timers.target
,WantedBy=battery.service
in /etc/systemd/system/battery.timer zu wechseln , aber das macht nichts.Antworten:
Eine Antwort auf diese Frage ist zu tauschen
User=nobody
nichtUser=ziga
aber mitUser=root
in /etc/systemd/system/battery.service . Selbst wenn der Benutzerziga
über alle Berechtigungen zur Verwendung einessudo
Befehls verfügt, kann er nichtsystemctl hibernate
innerhalb des Bash-Skripts ausgeführt werden. Ich weiß wirklich nicht, warum das passiert. Die Arbeitsdateien lauten also wie folgt:/etc/systemd/system/battery.service
/etc/systemd/system/battery.timer
/ home / ziga / Dropbox / workspace / operacijski / archlinux / hibernate / hibernatescript
Ich versuchte es und es allso Arbeiten mit
User=ziga
oderUser=nobody
aber wir müssen Änderung/usr/bin/systemctl hibernate
insudo /usr/bin/systemctl hibernate
im letzten Skript. Es sieht also so aus, als wäre eineUser
Variable irgendwie egal ... Oh, und Sie können auch absolute Namen aus dem letzten Skript entfernen und die erste Zeile von#!/bin/sh
in ändern#!/bin/bash
. Ich habe auchWantedBy=timers.target
zuWantedBy=battery.service
in /etc/systemd/system/battery.timer .Los geht's. Die beste Alternative zu Laptops im Ruhezustand bei schwachem Akku. =)
quelle
Möglicherweise sollten Sie versuchen, den ersten Start nach dem Start wie folgt hinzuzufügen:
[Timer] OnBootSec=15min OnUnitActiveSec=2m
quelle
Authentication is required for hibernating the system.
und fordere das Root-Passwort an. Vielleicht haben Sie das gleiche Problem und sollten es unter startensudo
?ziga
ist in der Gruppeusers
und ich habe diese Regel%users ALL=(ALL) NOPASSWD: ALL
in der Datei / etc / sudoers. Diese Regel ermöglicht es allen Benutzern aus der Gruppeusers
,sudo
Befehle auszuführen, ohne ein Kennwort einzugeben . Der Benutzerziga
sollte also in Ordnung sein, oder? Welche Art von Benutzer verwendet ein systemd-Dienst? Ich habe versucht , EinstellungUser=nobody
undUser=ziga
in /etc/systemd/system/battery.service aber nichts funktioniert.