использование таймеров 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: изящно сбой резервного копирования, когда внешний диск не подключен
  • Каков правильный способ отключения блока таймера systemd?
  • Как узнать, какая команда выполняется файлом systemd .timer?
  • Удаление таймера, созданного с помощью systed-run --on-calendar
  • Поручить выполнить блок после успешного завершения работы другого устройства
  • Периодически выполняемый btrfs-scrub
  • системный таймер каждые 2 часа через 30 минут после часа?
  • 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

    Interesting Posts

    Проблема с печатью с помощью службы ArchLinux и CUPS

    Перемещение сохраняет права собственности на исходные файлы, не позволяя делать записи

    Dogtag CA после установки

    Почему GNU Screen не отображается для удаленного пользователя?

    Не удалось удалить Root CA (UNIX: операция не разрешена)

    Как обновить настройки пользователя / группы запущенного процесса?

    Выделить текущую позицию мыши

    mutt: мусорный макрос

    исключение Emask 0x10 SAct 0x0 SErr 0x4060000 действие 0xe замороженное t2

    метаданные репозитория (repomd.xml) для хранилища: mratwork-centalt

    Ключ к букве «p» не работает повсюду, Ubuntu Linux

    Вопрос AWK: напечатайте N строк, начиная с третьей строки после указания / pattern /

    Установка из источника. Как разрешать зависимости без уничтожения диспетчера пакетов

    Сценарий оболочки для запуска приложения Node.js с помощью Gulp каждые два часа

    Создайте пользователя, который может получить доступ только к одному каталогу

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