GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden von systemd-Timern anstelle von cron

Eine Antwort auf diese Frage ist, User=nobody auszutauschen nicht mit User=ziga aber mit User=root in /etc/systemd/system/battery.service . Irgendwie auch wenn Benutzer ziga hat alle Privilegien zur Verwendung von sudo Befehl kann systemctl hibernate nicht ausgeführt werden innerhalb des Bash-Skripts. Ich weiß wirklich nicht, warum das passiert. Die Arbeitsdateien sind also wie folgt:

/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
)

Ich habe es ausprobiert und es funktioniert auch mit User=ziga oder User=nobody aber wir müssen /usr/bin/systemctl hibernate ändern in sudo /usr/bin/systemctl hibernate im letzten Skript. Es sieht also aus wie User Variable spielt irgendwie keine Rolle... Oh, und Sie können auch absolute Namen aus dem letzten Skript entfernen und die erste Zeile von #!/bin/sh ändern bis #!/bin/bash . Ich habe auch WantedBy=timers.target geändert bis WantedBy=battery.service in /etc/systemd/system/battery.timer .

Los geht's. Die beste Cron-Alternative, um Laptops bei schwachem Akku in den Ruhezustand zu versetzen. =)


Vielleicht sollten Sie versuchen, den ersten Start nach dem Booten hinzuzufügen, wie folgt:

[Timer] OnBootSec=15min OnUnitActiveSec=2m


Linux
  1. Verwenden Sie systemd-Timer anstelle von Cronjobs

  2. Verwalten Sie den Start mit systemd

  3. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  4. Wie verwendet Systemd /etc/init.d-Skripte?

  5. Env Vars in /etc/environment nicht global sichtbar?

Verwenden von systemd-Funktionen zum Sichern von Diensten

Alte Sysvinit-Gewohnheiten auf Systemd portieren?

Linux – Wie stellt man die Standard-CPU-Affinität für alle Daemons in Systemd ein?

SystemD - Wofür wird SystemD verwendet?

So finden Sie heraus, ob ein System SysV, Upstart oder Systemd initsystem verwendet

Unterschied zwischen /etc/hosts und /etc/resolv.conf