Как изменить serviceConfig службы, определенной в nixpkgs, из configuration.nix?

Nagios в nixpkgs имеет systemd.services.nagios.serviceConfig.Restart="always";, который загромождает журнал journalctl -u nagios и должен быть Restart="no"; вместо!

Исправление MySQL

Для MySQL это работает:

systemd.services.mysql.serviceConfig = {
  Restart = "always";
  RestartSec="10s";
  StartLimitInterval="1min";
};

Поскольку служба MySQL не перечисляет какие-либо «Restart», «RestartSec» или «StartLimitInterval», я полагаю.

Попытка исправить nagios

Используя тот же механизм для nagios, что и для MySQL, я пытаюсь:

systemd.services.nagios.serviceConfig.Restart = "no";

Дает мне:

error: The option `systemd.services.nagios.serviceConfigRestart' defined in `/etc/nixos/configuration.nix' does not exist.
(use ‘--show-trace’ to show detailed location information)

Если бы я обновил его до:

systemd.services.nagios.serviceConfig = lib.mkForce { Restart = "no"; };

В результате значения в systemd.services.mysql.serviceConfig теперь содержат только «Перезапуск», но не содержат важных определений «ExecStart» и других служб:

journalctl -u nagios
nagios.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.

Наконец, используя это:

systemd.services.nagios.serviceConfig = config.systemd.services.nagios.serviceConfig // { Restart = "no"; };

Дай мне:

nixos-rebuild switch
error: infinite recursion encountered, at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44
(use ‘--show-trace’ to show detailed location information)

person qknight    schedule 04.06.2018    source источник


Ответы (2)


оказывается, это была ошибка в nixpkgs, см. https://github.com/NixOS/nixpkgs/pull/41446

person qknight    schedule 09.06.2018

systemd.services.nagios.serviceConfig.Restart = "no";

  • должно сработать

ошибка: параметр systemd.services.nagios.serviceConfigRestart' defined in/etc/nixos/configuration.nix не существует. (используйте ‘--show-trace’ для отображения подробной информации о местоположении)

  • Предполагает, что вы просто случайно пропустили . в serviceConfig.Restart

Некоторые дополнительные объяснения в случае его использования:

systemd.services.nagios.serviceConfig = lib.mkForce { Restart = "no"; }; в результате значения в systemd.services.mysql.serviceConfig теперь содержат только «Restart», но не содержат важных «ExecStart» и других определений службы:

journalctl -u nagios nagios.service: в службе отсутствуют параметры ExecStart= и ExecStop=. Отказ.

  • Это потому, что вы заставили заменить serviceConfig

наконец, используя это:

systemd.services.nagios.serviceConfig = config.systemd.services.nagios.serviceConfig // { Restart = "no"; }; дай мне:

Ошибка переключения nixos-rebuild: обнаружена бесконечная рекурсия, в /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44

  • Это потому, что вы определяете значение serviceConfig как значение serviceConfig, что является бесконечной рекурсией!
person brocking    schedule 08.06.2018