diff --git a/data/export/systemd/master.target.erb b/data/export/systemd/master.target.erb index 3a8466d..d054c29 100644 --- a/data/export/systemd/master.target.erb +++ b/data/export/systemd/master.target.erb @@ -1 +1,6 @@ [Unit] +StopWhenUnneeded=true +Wants=<%= process_master_names.join(' ') %> + +[Install] +WantedBy=multi-user.target diff --git a/data/export/systemd/process.service.erb b/data/export/systemd/process.service.erb index e51d8c0..aa2668d 100644 --- a/data/export/systemd/process.service.erb +++ b/data/export/systemd/process.service.erb @@ -13,6 +13,3 @@ StandardOutput=syslog StandardError=syslog SyslogIdentifier=%n KillMode=process - -[Install] -WantedBy=<%= app %>-<%= name %>.target diff --git a/data/export/systemd/process_master.target.erb b/data/export/systemd/process_master.target.erb index 0a2f981..7b3b9bb 100644 --- a/data/export/systemd/process_master.target.erb +++ b/data/export/systemd/process_master.target.erb @@ -1,5 +1,3 @@ [Unit] StopWhenUnneeded=true - -[Install] -WantedBy=<%= app %>.target \ No newline at end of file +Wants=<%= process_names.join(' ') %> diff --git a/lib/foreman/export/systemd.rb b/lib/foreman/export/systemd.rb index a6f0381..78a643c 100644 --- a/lib/foreman/export/systemd.rb +++ b/lib/foreman/export/systemd.rb @@ -10,16 +10,23 @@ class Foreman::Export::Systemd < Foreman::Export::Base clean file end - write_template "systemd/master.target.erb", "#{app}.target", binding + process_master_names = [] engine.each_process do |name, process| next if engine.formation[name] < 1 - write_template "systemd/process_master.target.erb", "#{app}-#{name}.target", binding + + process_names = [] 1.upto(engine.formation[name]) do |num| port = engine.port_for(process, num) write_template "systemd/process.service.erb", "#{app}-#{name}-#{num}.service", binding + process_names << "#{app}-#{name}-#{num}.service" end + + write_template "systemd/process_master.target.erb", "#{app}-#{name}.target", binding + process_master_names << "#{app}-#{name}.target" end + + write_template "systemd/master.target.erb", "#{app}.target", binding end end