использование таймеров systemd вместо cron

Я нахожусь в Arch Linux, где я пытаюсь создать таймер systemd в качестве альтернативы cron для спящего режима на моем ноутбуке при разряженной батарее. Поэтому я написал эти три файла:

/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 

/ Главная / Жига / Dropbox / рабочее пространство / operacijski / Archlinux / спящий режим / 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 ) 

А затем включить таймер I:

 sudo systemctl enable battery.timer sudo systemctl start battery.timer 

И как-то он не работает. Скрипт работает сам по себе. Это означает, что если я выполню команду ниже, мой компьютер спящий просто отлично.

 /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript 

ADD1:

После включения и запуска таймера я проверил некоторые проверки, и это то, что я получаю:

 [ziga@ziga-laptop ~]$ systemctl list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES n/an/an/an/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 

а также

 [ziga@ziga-laptop ~]$ systemctl | grep battery battery.timer loaded active elapsed Periodical checking of battery status every two minutes 

ADD2:

После применения решения от Alexander T запускается мой таймер (проверьте код ниже), но скрипт не спящий с моей ноутбука, если он спящий, если я выполняю его напрямую.

 [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 

  • Как настроить Systemd Timer для запуска службы в последний день месяца
  • Есть ли способ узнать, когда будет запускаться системный таймер?
  • systemd.unit `RequiresMountsFor =` vs `ConditionPathIsDirectory =`
  • системный таймер каждые 2 часа через 30 минут после часа?
  • systemd запустить блок на успех другого
  • Ошибка анализа на блоке таймера systemd. Неверная документация?
  • Периодически выполняемый btrfs-scrub
  • Каков правильный способ отключения блока таймера systemd?
  • 2 Solutions collect form web for “использование таймеров systemd вместо cron”

    Ответ на этот вопрос заключается в замене User=nobody не на User=ziga а на User=root в /etc/systemd/system/battery.service . Так или иначе, даже если пользователь ziga обладает всеми привилегиями использования команды sudo он не может выполнить systemctl hibernate внутри сценария bash. Я действительно не знаю, почему это происходит. Таким образом, рабочие файлы выглядят следующим образом:

    /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 

    / Главная / Жига / Dropbox / рабочее пространство / operacijski / Archlinux / спящий режим / 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 ) 

    Я попробовал это, и он также работает с User=ziga или User=nobody но нам нужно изменить /usr/bin/systemctl hibernate в sudo /usr/bin/systemctl hibernate в последнем скрипте. Таким образом, похоже, что переменная User как-то даже не имеет значения … О, и вы также можете удалить абсолютные имена из последнего скрипта и изменить первую строку из #!/bin/sh на #!/bin/bash . Я также изменил WantedBy=timers.target на WantedBy=battery.service в /etc/systemd/system/battery.timer .

    Вот так. Лучшая альтернатива cron для ноутбуков с гибернацией на батарее. знак равно

    Может быть, вы пытаетесь добавить первый запуск после загрузки, например:

    [Timer] OnBootSec=15min OnUnitActiveSec=2m

    Linux и Unix - лучшая ОС в мире.