GNU/Linux >> Znalost Linux >  >> Linux

pomocí časovačů systemd místo cronu

Odpověď na tuto otázku je vyměnit User=nobody ne s User=ziga ale s User=root v /etc/systemd/system/battery.service . Nějak i když uživatel ziga má všechna oprávnění k používání sudo příkaz, který nemůže provést systemctl hibernate uvnitř bash skriptu. Opravdu nevím, proč se to děje. Pracovní soubory jsou tedy následující:

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

Zkoušel jsem to a funguje to také s User=ziga nebo User=nobody ale musíme změnit /usr/bin/systemctl hibernate do sudo /usr/bin/systemctl hibernate v posledním skriptu. Takže to vypadá jako User proměnná nějak ani nezáleží... Jo a taky můžeš z posledního skriptu odstranit absolutní názvy a změnit první řádek z #!/bin/sh na #!/bin/bash . Také jsem změnil WantedBy=timers.target na WantedBy=battery.service v /etc/systemd/system/battery.timer .

Tady máš. Nejlepší alternativa cronu k hibernaci notebooků s nízkou baterií. =)


Možná byste se měli pokusit přidat první spuštění po spuštění, například takto:

[Timer] OnBootSec=15min OnUnitActiveSec=2m


Linux
  1. Spravujte spouštění pomocí systemd

  2. Začněte používat systemd jako nástroj pro odstraňování problémů

  3. Portování starých návyků Sysvinit na Systemd?

  1. Linux – Jak nastavit výchozí afinitu CPU pro všechny démony v Systemd?

  2. Jak se aktualizuje /etc/motd?

  3. Jak změnit úrovně běhu/cíle pomocí systemd v Ubuntu

  1. Kdy mám použít /dev/shm/ a kdy /tmp/?

  2. Jak zjistit, zda používám systemd na Linuxu?

  3. Jak zjistit, zda systém používá SysV, Upstart nebo Systemd initsystem