Systemd: why is my unit restarted 2 times?

I have 2 simple units:

systemd.services.myservice = {

  serviceConfig = {

    Type = "simple";

    ExecStart = ''
      ${pkgs.bash}/bin/bash -c 'echo "Hello World!"'
    '';
  };
};

systemd.services.mytrigger = {

  wantedBy = [
    "multi-user.target"
  ];
  wants = [
    "myservice.service"
  ];
  before = [
    "myservice.service"
  ];

  serviceConfig = {

    Type = "simple";

    ExecStartPre = "${pkgs.bash}/bin/bash -c 'sleep 10'";
    ExecStart = "${pkgs.bash}/bin/bash -c 'sleep 49'";

    TimeoutStartSec = "infinity";
    Restart = "always";
    RestartSec = "1000ms";
  };
};

When loading this nix configuration, I noticed that myservice.service restarts twice as more than mytrigger.service.

[root@myhost:~]# journalctl -u mytrigger.service -u myservice.service -f -o short-precise
-- Logs begin at Wed 2020-03-04 17:39:45 UTC. --
Mar 31 14:03:48.334702 myhost systemd[1]: Stopped mytrigger.service.
Mar 31 14:03:48.336800 myhost systemd[1]: Starting mytrigger.service...
Mar 31 14:03:58.350306 myhost systemd[1]: Started mytrigger.service.
Mar 31 14:03:58.352224 myhost systemd[1]: Started myservice.service.
Mar 31 14:03:58.359918 myhost bash[54388]: Hello World!
Mar 31 14:03:58.361815 myhost systemd[1]: myservice.service: Succeeded.
Mar 31 14:04:47.366008 myhost systemd[1]: mytrigger.service: Succeeded.
Mar 31 14:04:47.369888 myhost systemd[1]: Started myservice.service.
Mar 31 14:04:47.374478 myhost bash[54564]: Hello World!
Mar 31 14:04:47.375192 myhost systemd[1]: myservice.service: Succeeded.
Mar 31 14:04:48.585570 myhost systemd[1]: mytrigger.service: Service RestartSec=1s expired, scheduling restart.
Mar 31 14:04:48.585910 myhost systemd[1]: mytrigger.service: Scheduled restart job, restart counter is at 21.
Mar 31 14:04:48.586095 myhost systemd[1]: Stopped mytrigger.service.
Mar 31 14:04:48.588383 myhost systemd[1]: Starting mytrigger.service...
Mar 31 14:04:58.598008 myhost systemd[1]: Started mytrigger.service.
Mar 31 14:04:58.606126 myhost systemd[1]: Started myservice.service.
Mar 31 14:04:58.610276 myhost bash[54622]: Hello World!
Mar 31 14:04:58.610768 myhost systemd[1]: myservice.service: Succeeded.
Mar 31 14:05:47.608485 myhost systemd[1]: mytrigger.service: Succeeded.
Mar 31 14:05:47.611397 myhost systemd[1]: Started myservice.service.
Mar 31 14:05:47.617188 myhost bash[54722]: Hello World!
Mar 31 14:05:47.617909 myhost systemd[1]: myservice.service: Succeeded.
Mar 31 14:05:48.836306 myhost systemd[1]: mytrigger.service: Service RestartSec=1s expired, scheduling restart.
Mar 31 14:05:48.837376 myhost systemd[1]: mytrigger.service: Scheduled restart job, restart counter is at 22.
Mar 31 14:05:48.837990 myhost systemd[1]: Stopped mytrigger.service.
Mar 31 14:05:48.842165 myhost systemd[1]: Starting mytrigger.service...
Mar 31 14:05:58.852184 myhost systemd[1]: Started mytrigger.service.
Mar 31 14:05:58.860124 myhost systemd[1]: Started myservice.service.
Mar 31 14:05:58.864363 myhost bash[54784]: Hello World!
Mar 31 14:05:58.864938 myhost systemd[1]: myservice.service: Succeeded.
Mar 31 14:06:47.861991 myhost systemd[1]: mytrigger.service: Succeeded.
Mar 31 14:06:47.867910 myhost systemd[1]: Started myservice.service.
Mar 31 14:06:47.872036 myhost bash[54940]: Hello World!
Mar 31 14:06:47.872576 myhost systemd[1]: myservice.service: Succeeded.
Mar 31 14:06:49.085874 myhost systemd[1]: mytrigger.service: Service RestartSec=1s expired, scheduling restart.
Mar 31 14:06:49.087153 myhost systemd[1]: mytrigger.service: Scheduled restart job, restart counter is at 23.
Mar 31 14:06:49.087769 myhost systemd[1]: Stopped mytrigger.service.
Mar 31 14:06:49.090364 myhost systemd[1]: Starting mytrigger.service...

I expected myservice.service to start as many times as mytrigger.service does. When myservice.service is set as an after ordering in mytrigger.service, then both services restart the same amount of times.

I am not sure this is nix-related, perhaps it is the behavior of systemd.

Is this the expected behavior?

Your service type is wrong - they are not simple services but oneshot.

I am trying to understand a real world problem with NixOps keys and my example services are just a simplification of my use case.

  • mytrigger.service is a simplification of the NixOps-generated unit for keys (see source) and the unit is of type simple so I just kept this type. Because the type is not explicit in the code, I doubled checked it:
    [root@myhost:~]# systemctl show smtp-password-key.service | grep Type
    Type=simple
    
  • myservice.service is a simplification of a config file builder that takes my smtp-password to build a remotes file for nullmailer. I changed it to oneshot but the problem remains.