Модуль: Homebrew::Services::System Приватный
- Расширяет:
- Utils::Output::Mixin
- Определён в:
- services/system.rb,
services/system/systemctl.rb
Этот модуль является частью приватного API. Этот модуль можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот модуль, поскольку он может быть удалён или изменён без предупреждения.
Определено в пространстве имён
Модули: Systemctl
Краткое описание констант свернуть
- LAUNCHCTL_DOMAIN_ACTION_NOT_SUPPORTED =
Эта константа является частью приватного API. Эту константу можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать эту константу, поскольку она может быть удалена или изменена без предупреждения.
125- MISSING_DAEMON_MANAGER_EXCEPTION_MESSAGE =
Эта константа является частью приватного API. Эту константу можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать эту константу, поскольку она может быть удалена или изменена без предупреждения.
"`brew services` is supported only on macOS or Linux (with systemd)!"
Краткое описание методов класса свернуть
- .boot_path ⇒ Pathname приватный
Запускается при загрузке.
- .candidate_domain_targets ⇒ Array<String> приватный
- .domain_target ⇒ String приватный
- .launchctl ⇒ Pathname? приватный
Путь к исполняемому файлу launchctl.
- .launchctl? ⇒ Boolean приватный
Используется ли система launchctl.
- .path ⇒ Pathname приватный
Если это root, возвращает
boot_path, иначе возвращаетuser_path. - .reset_launchctl! ⇒ void приватный
- .root? ⇒ Boolean приватный
Ура, мы работаем от имени root!
- .systemctl? ⇒ Boolean приватный
Используется ли система systemd.
- .user ⇒ String? приватный
Текущий пользователь, от имени которого запущен
[sudo] brew services. - .user_exists?(username) ⇒ Boolean приватный
- .user_of_process(pid) ⇒ String? приватный
- .user_path ⇒ Pathname приватный
Запускается при входе в систему.
Методы, включённые из Utils::Output::Mixin
issue_reporting_message, odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, opoo_without_github_actions_annotation, pretty_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_uninstalled, pretty_upgradable, pretty_warning
Подробное описание методов класса
.boot_path ⇒ Pathname
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Запускается при загрузке.
74 75 76 77 78 79 80 81 82 | # File 'services/system.rb', line 74 def self.boot_path if launchctl? Pathname.new("/Library/LaunchDaemons") elsif systemctl? Pathname.new("/usr/lib/systemd/system") else raise UsageError, MISSING_DAEMON_MANAGER_EXCEPTION_MESSAGE end end |
.candidate_domain_targets ⇒ Array<String>
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
131 132 133 134 135 | # File 'services/system.rb', line 131 def self.candidate_domain_targets candidates = [domain_target] candidates += ["user/#{Process.euid}", "gui/#{Process.uid}"] unless root? candidates.uniq end |
.domain_target ⇒ String
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | # File 'services/system.rb', line 103 def self.domain_target if root? "system" elsif (ssh_tty = ENV.fetch("HOMEBREW_SSH_TTY", nil).present? && File.stat("/dev/console").uid != Process.uid) || (sudo_user = ENV.fetch("HOMEBREW_SUDO_USER", nil).present?) || (Process.uid != Process.euid) if @output_warning.blank? && ENV.fetch("HOMEBREW_SERVICES_NO_DOMAIN_WARNING", nil).blank? if ssh_tty opoo "running over SSH without /dev/console ownership, using user/* instead of gui/* domain!" elsif sudo_user opoo "running through sudo, using user/* instead of gui/* domain!" else opoo "uid and euid do not match, using user/* instead of gui/* domain!" end unless Homebrew::EnvConfig.no_env_hints? $stderr.puts "Hide this warning by setting `HOMEBREW_SERVICES_NO_DOMAIN_WARNING=1`." $stderr.puts "Hide these hints with `HOMEBREW_NO_ENV_HINTS=1` (see `man brew`)." end @output_warning = T.let(true, T.nilable(TrueClass)) end "user/#{Process.euid}" else "gui/#{Process.uid}" end end |
.launchctl ⇒ Pathname?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Путь к исполняемому файлу launchctl.
18 19 20 | # File 'services/system.rb', line 18 def self.launchctl @launchctl ||= T.let(which("launchctl"), T.nilable(Pathname)) end |
.launchctl? ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Используется ли система launchctl
29 30 31 | # File 'services/system.rb', line 29 def self.launchctl? launchctl.present? end |
.path ⇒ Pathname
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Если это root, возвращает boot_path, иначе возвращает user_path.
98 99 100 | # File 'services/system.rb', line 98 def self.path root? ? boot_path : user_path end |
.reset_launchctl! ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
23 24 25 | # File 'services/system.rb', line 23 def self.reset_launchctl! @launchctl = nil end |
.root? ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Ура, мы работаем от имени root!
41 42 43 | # File 'services/system.rb', line 41 def self.root? Process.euid.zero? end |
.systemctl? ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Используется ли система systemd
35 36 37 | # File 'services/system.rb', line 35 def self.systemctl? Systemctl.executable.present? end |
.user ⇒ String?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Текущий пользователь, от имени которого запущен [sudo] brew services.
47 48 49 | # File 'services/system.rb', line 47 def self.user @user ||= T.let(ENV["USER"].presence || Utils.safe_popen_read("/usr/bin/whoami").chomp, T.nilable(String)) end |
.user_exists?(username) ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
61 62 63 64 65 66 67 68 69 70 | # File 'services/system.rb', line 61 def self.user_exists?(username) # Current user must be present return true if username == user # Check other users Etc.getpwnam(username) true rescue ArgumentError false end |
.user_of_process(pid) ⇒ String?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
52 53 54 55 56 57 58 | # File 'services/system.rb', line 52 def self.user_of_process(pid) if pid.nil? || pid.zero? user else Utils.safe_popen_read("ps", "-o", "user", "-p", pid.to_s).lines.second&.chomp end end |
.user_path ⇒ Pathname
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Запускается при входе в систему.
86 87 88 89 90 91 92 93 94 | # File 'services/system.rb', line 86 def self.user_path if launchctl? Pathname.new("#{Dir.home}/Library/LaunchAgents") elsif systemctl? Pathname.new("#{Dir.home}/.config/systemd/user") else raise UsageError, MISSING_DAEMON_MANAGER_EXCEPTION_MESSAGE end end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Homebrew/Services/System.html