[Nix-dev] Systemd User Timers: timerConfig section?

Guillaume Maudoux (Layus) layus.on at gmail.com
Fri Feb 19 14:25:33 CET 2016


There is also systemd.services.<name>.startAt
<https://github.com/NixOS/nixpkgs/blob/release-15.09/nixos/modules/system/boot/systemd.nix#L712>
that creates the timer for you :-).

  systemd.services.urlwatch = rec {
    description = "Run urlwatch (${startAt})";
    startAt = "hourly";
    environment = {
      inherit (config.environment.variables) SSL_CERT_FILE;
    };

    serviceConfig = {
      User = "layus";
      ExecStart = "${urlwatch}/bin/urlwatch -v";
    };
  };


Le 19/02/16 13:22, Christoph Hrdinka a écrit :
> Hi Sergiu,
>
> systemd timers are defined via systemd.timers.<name> (systemwide) or
> systemd.user.timers.<name> (per user) and not within *.services.*.
>
> systemd.timers.timerConfig will be used as verbatim systemd timer
> config as of:
>
> https://www.freedesktop.org/software/systemd/man/systemd.timer.html
>
> Here is an example configuration:
>
> systemd.user.timers.my-task = {
>   description = "run my-task every 5 minutes";
>   wantedBy = [ "timers.target" ]; # enable it & auto start it
>  
>   timerConfig = {
>     OnCalendar = "*-*-* *:*/5:00";
>   };
> };
>
> This timer will start my-task.service every 5mins. This means you have
> to add a service as well:
>
> systemd.user.services.my-task = {
>   description = "My Task";
>   script = "echo hello world";
> };
>
> Now systemd will trigger my-task every 5mins. This is however not
> always what you want. Another way of doing this is to tell systemd to
> start the unit, wait for its completion and then start it again after
> 5mins.
>
> systemd.user.timers.my-task = {
>   description = "run my-task every 5 minutes";
>   wantedBy = [ "timers.target" ]; # enable it & auto start it
>  
>   timerConfig = {
>     OnBootSec = "5m"; # first run 5min after boot up
>     OnUnitInactiveSec = "5m"; # run 5min after my-task has finished
>   };
> };
>
> This timer will trigger reruns 5mins after the last run ended. A
> service of type "simple" (default) will be set to inactive immediately
> after start. If you set it to "oneshot" its activation will last as
> long as the run does:
>
> systemd.user.services.my-task = {
>   description = "My Task";
>   script = "echo hello world";
>   serviceConfig.Type = "oneshot";
> };
>
> You can test this by running `systemctl start my-task`. With "simple"
> it will return immedialtely, with "oneshot" it will return when the
> script exits. You can also mix the service/timer units of the above
> examples to get different behaviours.
>
> Best regards,
> Christoph.
>
> On Fri, 19 Feb 2016 12:11:14 +0100
> Sergiu Ivanov <sivanov at colimite.fr> wrote:
>
>> Hello,
>>
>> I am trying to set up a (custom) systemd timer running a task every
>> 5 minutes.  From what I can see, relying on
>> system.user.services.myTimer might be the way to go, but I can only
>> see the option startAt available, which starts my unit at a given
>> date/time and therefore does not really fit my needs.
>>
>> Is there a way to define other timer attributes?
>>
>> (I looked for timerConfig, which would be similar to serviceConfig or
>> unitConfig, but it doesn't seem to exist.)
>>
>> What is the recommended way to go for such periodic tasks under NixOS?
>> Do you guys all prefer cron?
>>
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.science.uu.nl/pipermail/nix-dev/attachments/20160219/fbbad32b/attachment.html 


More information about the nix-dev mailing list