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)


23
24
25
26
# File 'utils/service.rb', line 23

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:



30
31
32
33
34
35
# File 'utils/service.rb', line 30

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)


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

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)


11
12
13
14
15
16
17
18
19
# File 'utils/service.rb', line 11

def self.running?(formula)
  if launchctl?
    Homebrew::Services::System.launchctl_service_running?(formula.plist_name)
  elsif systemctl?
    quiet_system(systemctl, "is-active", "--quiet", formula.service_name)
  else
    false
  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:



39
40
41
42
43
44
# File 'utils/service.rb', line 39

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)


52
53
54
# File 'utils/service.rb', line 52

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:



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'utils/service.rb', line 59

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