Sha256: c776aebc141fc35909471534a1a4f383b147c56d163e67210415d5648ea8df15

Contents?: true

Size: 1.35 KB

Versions: 16

Compression:

Stored size: 1.35 KB

Contents

module Tomo::Plugin::Sidekiq
  class Tasks < Tomo::TaskLibrary
    SystemdUnit = Struct.new(:name, :template, :path)

    def setup_systemd
      linger_must_be_enabled!

      remote.mkdir_p service.path.dirname
      remote.write template: service.template, to: service.path

      remote.run "systemctl --user daemon-reload"
      remote.run "systemctl", "--user", "enable", service.name
    end

    %i[reload restart start stop status].each do |action|
      define_method(action) do
        remote.run "systemctl", "--user", action, service.name
      end
    end

    def log
      remote.attach "journalctl", "-q", raw("--user-unit=#{service.name.shellescape}"), *settings[:run_args]
    end

    private

    def service
      SystemdUnit.new(
        settings[:sidekiq_systemd_service],
        paths.sidekiq_systemd_service_template,
        paths.sidekiq_systemd_service
      )
    end

    def linger_must_be_enabled!
      linger_users = remote.list_files("/var/lib/systemd/linger", raise_on_error: false)
      return if dry_run? || linger_users.include?(remote.host.user)

      die <<~ERROR.strip
        Linger must be enabled for the #{remote.host.user} user in order for
        sidekiq to stay running in the background via systemd. Run the following
        command as root:

          loginctl enable-linger #{remote.host.user}
      ERROR
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
tomo-plugin-sidekiq-1.4.2 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.4.1 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.4.0 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.3.2 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.3.1 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.3.0 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.2.2 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.2.1 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.2.0 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.1.3 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.1.2 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.1.1 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.1.0 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.0.4 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.0.3 lib/tomo/plugin/sidekiq/tasks.rb
tomo-plugin-sidekiq-1.0.2 lib/tomo/plugin/sidekiq/tasks.rb