LINUX.ORG.RU
ФорумAdmin

Перепроверьте меня: обрамить запуск/остановку сервиса парой команд.

 ,


0

2

Задача: соорудить сервис, состояние которого версионированно хранилось бы во внешнем хранилище. Из соображений производительности и надежности перед стартом его надо скачивать заново, а после остановки — заливать обратно, вне зависимости от причины и способа запуска и остановки. Ситуация внезапной смерти между стартом сервиса и окончанием заливки тут не рассматривается.

Наблюдение 1: есть ExecStartPre/ExecStopPost, но это 1) надо менять обрамляемый сервис, а прикольнее, если не надо 2) непонятно, как добавлять такое в NixOS в случае, если они уже однократно определены (они в NixOS не список).

Наблюдение 2: можно слепить oneshot-сервис из двух команд и попытаться жестко связать его lifetime с обрамляемым. Идеальным кандидатом видится BindsTo, но опять надо менять обрамляемый сервис (хотя уже понятнее как).

Наблюдение 3: нужно задать Before, иначе с порядком будут вольности. Так?

Наблюдение 4: можно задать BindsTo не в ту сторону, дополнив его RequiredBy. Не хватает уверенности, достаточно ли этого и симметричны ли отношения BindsTo+Before/BoundBy+After.

Итого cочинил черновичок:

systemd.services.nica-testservice = {                                                                 
  stopIfChanged = true;                                                                               
  requiredBy = [ "nginx.service" ];                                                                   
  bindsTo = [ "nginx.service" ];                                                                      
  before = [ "nginx.service" ];                                                                       
  script = ''                                                                                         
    ${pkgs.duplicity}/bin/duplicity --no-encryption file:///home/monk/duptest/testservice /var/lib/testservice                                                                                                
  '';                                                                                                 
  preStop = ''                                                                                        
    ${pkgs.duplicity}/bin/duplicity --no-encryption /var/lib/testservice file:///home/monk/duptest/testservice; rm -rf /var/lib/testservice/*                                                                 
  '';                                                                                                 
  serviceConfig = {                                                                                   
    Type = "oneshot";                                                                                 
    RemainAfterExit = true;                                                                           
  };                                                                                                  
};

Вопросы: симметричны ли отношения BindsTo+Before/BoundBy+After? достиг ли я цели? где накосячил? не прописал ли лишнего?

Ретрограды цыц, вы так вообще не умеете.

★★★★★

Последнее исправление: t184256 (всего исправлений: 1)

Requires, RequiredBy, Wants, WanteBy, BindsTo, BoundBy, Requisite, RequisiteOf, Before, After...

Иногда думаю: то ли модель зависимостей в сустемд придумывал наркоман-педераст под грибами, то ли... на этом мысль отанавливается.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.