Merge pull request #12837 from NickHackman/service-launch-only-once
service: launch only once
This commit is contained in:
commit
249bc2136a
@ -112,6 +112,18 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
sig { params(value: T.nilable(T::Boolean)).returns(T.nilable(T::Boolean)) }
|
||||
def launch_only_once(value = nil)
|
||||
case T.unsafe(value)
|
||||
when nil
|
||||
@launch_only_once
|
||||
when true, false
|
||||
@launch_only_once = value
|
||||
else
|
||||
raise TypeError, "Service#launch_only_once expects a Boolean"
|
||||
end
|
||||
end
|
||||
|
||||
sig { params(value: T.nilable(Integer)).returns(T.nilable(Integer)) }
|
||||
def restart_delay(value = nil)
|
||||
case T.unsafe(value)
|
||||
@ -291,6 +303,7 @@ module Homebrew
|
||||
}
|
||||
|
||||
base[:KeepAlive] = @keep_alive if @keep_alive == true
|
||||
base[:LaunchOnlyOnce] = @launch_only_once if @launch_only_once == true
|
||||
base[:LegacyTimers] = @macos_legacy_timers if @macos_legacy_timers == true
|
||||
base[:TimeOut] = @restart_delay if @restart_delay.present?
|
||||
base[:ProcessType] = @process_type.to_s.capitalize if @process_type.present?
|
||||
@ -321,11 +334,14 @@ module Homebrew
|
||||
WantedBy=multi-user.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=#{command.join(" ")}
|
||||
EOS
|
||||
|
||||
# command needs to be first because it initializes all other values
|
||||
cmd = command.join(" ")
|
||||
|
||||
options = []
|
||||
options << "Type=#{@launch_only_once == true ? "oneshot" : "simple"}"
|
||||
options << "ExecStart=#{cmd}"
|
||||
options << "Restart=always" if @keep_alive == true
|
||||
options << "RestartSec=#{restart_delay}" if @restart_delay.present?
|
||||
options << "WorkingDirectory=#{@working_dir}" if @working_dir.present?
|
||||
|
||||
@ -102,6 +102,7 @@ describe Homebrew::Service do
|
||||
root_dir var
|
||||
working_dir var
|
||||
keep_alive true
|
||||
launch_only_once true
|
||||
process_type :interactive
|
||||
restart_delay 30
|
||||
interval 5
|
||||
@ -127,6 +128,8 @@ describe Homebrew::Service do
|
||||
\t<true/>
|
||||
\t<key>Label</key>
|
||||
\t<string>homebrew.mxcl.formula_name</string>
|
||||
\t<key>LaunchOnlyOnce</key>
|
||||
\t<true/>
|
||||
\t<key>LegacyTimers</key>
|
||||
\t<true/>
|
||||
\t<key>ProcessType</key>
|
||||
@ -288,10 +291,11 @@ describe Homebrew::Service do
|
||||
expect(unit).to eq(unit_expect.strip)
|
||||
end
|
||||
|
||||
it "returns valid partial unit" do
|
||||
it "returns valid partial oneshot unit" do
|
||||
f.class.service do
|
||||
run opt_bin/"beanstalkd"
|
||||
run_type :immediate
|
||||
launch_only_once true
|
||||
end
|
||||
|
||||
unit = f.service.to_systemd_unit
|
||||
@ -303,10 +307,10 @@ describe Homebrew::Service do
|
||||
WantedBy=multi-user.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Type=oneshot
|
||||
ExecStart=#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd
|
||||
EOS
|
||||
expect(unit).to eq(unit_expect)
|
||||
expect(unit).to eq(unit_expect.strip)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user