diff --git a/lib/foreman/cli.rb b/lib/foreman/cli.rb index c1b7dc3..537a871 100644 --- a/lib/foreman/cli.rb +++ b/lib/foreman/cli.rb @@ -34,6 +34,7 @@ class Foreman::CLI < Thor formatter = case format when "upstart" then Foreman::Export::Upstart + when "inittab" then Foreman::Export::Inittab else error "Unknown export format: #{format}." end diff --git a/lib/foreman/export.rb b/lib/foreman/export.rb index adb83ae..1ab1146 100644 --- a/lib/foreman/export.rb +++ b/lib/foreman/export.rb @@ -5,3 +5,4 @@ module Foreman::Export end require "foreman/export/upstart" +require "foreman/export/inittab" diff --git a/lib/foreman/export/inittab.rb b/lib/foreman/export/inittab.rb new file mode 100644 index 0000000..5314073 --- /dev/null +++ b/lib/foreman/export/inittab.rb @@ -0,0 +1,31 @@ +require "foreman/export/base" + +class Foreman::Export::Inittab < Foreman::Export::Base + + def export(fname=nil, options={}) + app = options[:app] || File.basename(engine.directory) + user = options[:user] || app + log_dir = "/var/log/#{app}" + + concurrency = parse_concurrency(options[:concurrency]) + + inittab = [] + inittab << "# ----- foreman #{app} processes -----" + engine.processes.values.each_with_index do |process, num| + id = app.slice(0, 2).upcase + sprintf("%02d", num+1) + inittab << "#{id}:4:respawn:/bin/su - #{user} -c '#{process.command} >> #{log_dir}/#{process.name}-#{num+1}.log 2>&1'" + end + inittab << "# ----- end foreman #{app} processes -----" + + inittab = inittab.join("\n") + "\n" + + if fname + FileUtils.mkdir_p(log_dir) + FileUtils.chown(user, nil, log_dir) + write_file(fname, inittab) + else + puts inittab + end + end + +end