mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
services: add --keep
flag
This commit is contained in:
parent
ad75e9b337
commit
0b58e8fd37
@ -38,8 +38,9 @@ module Homebrew
|
||||
[`sudo`] `brew services start` (<formula>|`--all`|`--file=`):
|
||||
Start the service <formula> immediately and register it to launch at login (or boot).
|
||||
|
||||
[`sudo`] `brew services stop` (<formula>|`--all`):
|
||||
Stop the service <formula> immediately and unregister it from launching at login (or boot).
|
||||
[`sudo`] `brew services stop` (`--keep`) (`--no-wait`|`--max-wait=`) (<formula>|`--all`):
|
||||
Stop the service <formula> immediately and unregister it from launching at login (or boot),
|
||||
unless `--keep` is specified.
|
||||
|
||||
[`sudo`] `brew services kill` (<formula>|`--all`):
|
||||
Stop the service <formula> immediately but keep it registered to launch at login (or boot).
|
||||
@ -57,6 +58,7 @@ module Homebrew
|
||||
switch "--all", description: "Run <subcommand> on all services."
|
||||
switch "--json", description: "Output as JSON."
|
||||
switch "--no-wait", description: "Don't wait for `stop` to finish stopping the service."
|
||||
switch "--keep", description: "When stopped, don't unregister the service from launching at login (or boot)."
|
||||
conflicts "--max-wait=", "--no-wait"
|
||||
named_args
|
||||
end
|
||||
@ -117,6 +119,14 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
unless Homebrew::Services::Commands::Stop::TRIGGERS.include?(subcommand)
|
||||
raise UsageError, "The `#{subcommand}` subcommand does not accept the --keep argument!" if args.keep?
|
||||
raise UsageError, "The `#{subcommand}` subcommand does not accept the --no-wait argument!" if args.no_wait?
|
||||
if args.max_wait
|
||||
raise UsageError, "The `#{subcommand}` subcommand does not accept the --max-wait= argument!"
|
||||
end
|
||||
end
|
||||
|
||||
opoo "The --all argument overrides provided formula argument!" if formulae.present? && args.all?
|
||||
|
||||
targets = if args.all?
|
||||
@ -162,8 +172,13 @@ module Homebrew
|
||||
when *Homebrew::Services::Commands::Start::TRIGGERS
|
||||
Homebrew::Services::Commands::Start.run(targets, args.file, verbose: args.verbose?)
|
||||
when *Homebrew::Services::Commands::Stop::TRIGGERS
|
||||
max_wait = args.max_wait.to_f
|
||||
Homebrew::Services::Commands::Stop.run(targets, verbose: args.verbose?, no_wait: args.no_wait?, max_wait:)
|
||||
Homebrew::Services::Commands::Stop.run(
|
||||
targets,
|
||||
verbose: args.verbose?,
|
||||
no_wait: args.no_wait?,
|
||||
max_wait: args.max_wait.to_f,
|
||||
keep: args.keep?,
|
||||
)
|
||||
when *Homebrew::Services::Commands::Kill::TRIGGERS
|
||||
Homebrew::Services::Commands::Kill.run(targets, verbose: args.verbose?)
|
||||
else
|
||||
|
@ -159,12 +159,13 @@ module Homebrew
|
||||
verbose: T::Boolean,
|
||||
no_wait: T::Boolean,
|
||||
max_wait: T.nilable(T.any(Integer, Float)),
|
||||
keep: T::Boolean,
|
||||
).void
|
||||
}
|
||||
def self.stop(targets, verbose: false, no_wait: false, max_wait: 0)
|
||||
def self.stop(targets, verbose: false, no_wait: false, max_wait: 0, keep: false)
|
||||
targets.each do |service|
|
||||
unless service.loaded?
|
||||
rm service.dest if service.dest.exist? # get rid of installed service file anyway, dude
|
||||
rm service.dest if !keep && service.dest.exist? # get rid of installed service file anyway, dude
|
||||
if service.service_file_present?
|
||||
odie <<~EOS
|
||||
Service `#{service.name}` is started as `#{service.owner}`. Try:
|
||||
@ -188,7 +189,11 @@ module Homebrew
|
||||
end
|
||||
|
||||
if System.systemctl?
|
||||
System::Systemctl.quiet_run(*systemctl_args, "disable", "--now", service.service_name)
|
||||
if keep
|
||||
System::Systemctl.quiet_run(*systemctl_args, "stop", service.service_name)
|
||||
else
|
||||
System::Systemctl.quiet_run(*systemctl_args, "disable", "--now", service.service_name)
|
||||
end
|
||||
elsif System.launchctl?
|
||||
quiet_system System.launchctl, "bootout", "#{System.domain_target}/#{service.service_name}"
|
||||
unless no_wait
|
||||
@ -204,9 +209,11 @@ module Homebrew
|
||||
quiet_system System.launchctl, "stop", "#{System.domain_target}/#{service.service_name}" if service.pid?
|
||||
end
|
||||
|
||||
rm service.dest if service.dest.exist?
|
||||
# Run daemon-reload on systemctl to finish unloading stopped and deleted service.
|
||||
System::Systemctl.run(*systemctl_args, "daemon-reload") if System.systemctl?
|
||||
unless keep
|
||||
rm service.dest if service.dest.exist?
|
||||
# Run daemon-reload on systemctl to finish unloading stopped and deleted service.
|
||||
System::Systemctl.run(*systemctl_args, "daemon-reload") if System.systemctl?
|
||||
end
|
||||
|
||||
if service.pid? || service.loaded?
|
||||
opoo "Unable to stop `#{service.name}` (label: #{service.service_name})"
|
||||
|
@ -15,11 +15,12 @@ module Homebrew
|
||||
verbose: T::Boolean,
|
||||
no_wait: T::Boolean,
|
||||
max_wait: T.nilable(Float),
|
||||
keep: T::Boolean,
|
||||
).void
|
||||
}
|
||||
def self.run(targets, verbose:, no_wait:, max_wait:)
|
||||
def self.run(targets, verbose:, no_wait:, max_wait:, keep:)
|
||||
Services::Cli.check(targets)
|
||||
Services::Cli.stop(targets, verbose:, no_wait:, max_wait:)
|
||||
Services::Cli.stop(targets, verbose:, no_wait:, max_wait:, keep:)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -20,6 +20,9 @@ class Homebrew::Cmd::Services::Args < Homebrew::CLI::Args
|
||||
sig { returns(T::Boolean) }
|
||||
def json?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def keep?; end
|
||||
|
||||
sig { returns(T.nilable(String)) }
|
||||
def max_wait; end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user