Systemd/timers/ru: Difference between revisions

From NixOS Wiki
Unabomberlive (talk | contribs)
Created page with "Список активных таймеров и их текущее состояние:"
Unabomberlive (talk | contribs)
Created page with "Manually run a service once for testing purposes:"
Line 45: Line 45:
systemctl list-timers
systemctl list-timers
</syntaxhighlight>
</syntaxhighlight>
<div lang="en" dir="ltr" class="mw-content-ltr">
Manually run a service once for testing purposes:
Manually run a service once for testing purposes:
</div>
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
systemctl start hello-world
systemctl start hello-world
</syntaxhighlight>
</syntaxhighlight>
[[Category:systemd]]
[[Category:systemd]]

Revision as of 07:08, 6 August 2024

Таймеры - это файлы модулей systemd, чье имя заканчивается на .timer, которые управляют .service файлами или событиями. Таймеры могут быть использованы в качестве альтернативы cron. Таймеры имеют встроенную поддержку событий, основанных на календаре, и монотонных временных событий, а также могут запускаться асинхронно.

Настройка

Следующий пример таймера запускает каждые 5 минут юнит systemd, который вызывает сценарий bash.

systemd.timers."hello-world" = {
  wantedBy = [ "timers.target" ];
    timerConfig = {
      OnBootSec = "5m";
      OnUnitActiveSec = "5m";
      Unit = "hello-world.service";
    };
};

systemd.services."hello-world" = {
  script = ''
    set -eu
    ${pkgs.coreutils}/bin/echo "Hello World"
  '';
  serviceConfig = {
    Type = "oneshot";
    User = "root";
  };
};

Следующий пример запускается один раз в день (в 12:00). При активации он запускает службу немедленно, если пропущено время последнего запуска (опция Persistent=true), например, из-за отключения питания системы.

...
  timerConfig = {
      OnCalendar = "daily";
      Persistent = true; 
  };
};

More examples can be found at the Arch Wiki and at the systemd.timer manpage.

Использование

Список активных таймеров и их текущее состояние:

systemctl list-timers

Manually run a service once for testing purposes:

systemctl start hello-world