Module: Utils::Service Private

Defined in:
utils/service.rb

Overview

This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.

Helpers for brew services related code.

Class Method Summary collapse

Class Method Details

.installed?(formula) ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Check if a service file is installed in the expected location.

Parameters:

Returns:

  • (Boolean)


19
20
21
22
# File 'utils/service.rb', line 19

def self.installed?(formula)
  (launchctl? && formula.launchd_service_path.exist?) ||
    (systemctl? && formula.systemd_service_path.exist?)
end

.launchctlPathname?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Path to launchctl binary.

Returns:



26
27
28
29
30
31
# File 'utils/service.rb', line 26

def self.launchctl
  return @launchctl if defined? @launchctl
  return if ENV["HOMEBREW_TEST_GENERIC_OS"]

  @launchctl = T.let(which("launchctl"), T.nilable(Pathname))
end

.launchctl?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)


43
44
45
# File 'utils/service.rb', line 43

def self.launchctl?
  !launchctl.nil?
end

.running?(formula) ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Check if a service is running for a specified formula.

Parameters:

Returns:

  • (Boolean)


9
10
11
12
13
14
15
# File 'utils/service.rb', line 9

def self.running?(formula)
  if launchctl?
    quiet_system(launchctl, "list", formula.plist_name)
  elsif systemctl?
    quiet_system(systemctl, "is-active", "--quiet", formula.service_name)
  end
end

.systemctlPathname?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Path to systemctl binary.

Returns:



35
36
37
38
39
40
# File 'utils/service.rb', line 35

def self.systemctl
  return @systemctl if defined? @systemctl
  return if ENV["HOMEBREW_TEST_GENERIC_OS"]

  @systemctl = T.let(which("systemctl"), T.nilable(Pathname))
end

.systemctl?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)


48
49
50
# File 'utils/service.rb', line 48

def self.systemctl?
  !systemctl.nil?
end

.systemd_quote(str) ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Quote a string for use in systemd command lines, e.g., in ExecStart. https://www.freedesktop.org/software/systemd/man/latest/systemd.syntax.html#Quoting

Parameters:

Returns:



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'utils/service.rb', line 55

def self.systemd_quote(str)
  result = +"\""
  # No need to escape single quotes and spaces, as we're always double
  # quoting the entire string.
  str.each_char do |char|
    result << case char
    when "\a" then "\\a"
    when "\b" then "\\b"
    when "\f" then "\\f"
    when "\n" then "\\n"
    when "\r" then "\\r"
    when "\t" then "\\t"
    when "\v" then "\\v"
    when "\\" then "\\\\"
    when "\"" then "\\\""
    else char
    end
  end
  result << "\""
  result.freeze
end