delayed jobs: run dj workers under systemd (fix #4108).
This commit is contained in:
@@ -2,11 +2,11 @@ namespace :delayed_job do
|
|||||||
desc "Start delayed_job process"
|
desc "Start delayed_job process"
|
||||||
task :start do
|
task :start do
|
||||||
on roles(:worker) do
|
on roles(:worker) do
|
||||||
if test("[ -d #{current_path} ]")
|
within current_path do
|
||||||
within current_path do
|
with rails_env: fetch(:rails_env) do
|
||||||
with rails_env: fetch(:rails_env) do
|
fetch(:delayed_job_workers, 16).times do |n|
|
||||||
hostname = capture("hostname").strip
|
bundle = SSHKit.config.command_map[:bundle]
|
||||||
execute :bundle, "exec", "script/delayed_job", "--queues=default,#{hostname}", "-n 8", "start"
|
execute :"systemd-run", "--user --collect --slice delayed_job --unit delayed_job.#{n} -E RAILS_ENV=$RAILS_ENV -p WorkingDirectory=$PWD -p Restart=always #{bundle} exec script/delayed_job --queues=default run"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -16,36 +16,25 @@ namespace :delayed_job do
|
|||||||
desc "Stop delayed_job process"
|
desc "Stop delayed_job process"
|
||||||
task :stop do
|
task :stop do
|
||||||
on roles(:worker) do
|
on roles(:worker) do
|
||||||
if test("[ -d #{current_path} ]")
|
execute :systemctl, "--user stop delayed_job.slice"
|
||||||
within current_path do
|
|
||||||
with rails_env: fetch(:rails_env) do
|
|
||||||
execute :bundle, "exec", "script/delayed_job", "stop"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Restart delayed_job process"
|
desc "Restart delayed_job process"
|
||||||
task :restart do
|
task :restart do
|
||||||
on roles(:worker) do
|
on roles(:worker) do
|
||||||
find_and_execute_task("delayed_job:stop")
|
execute :systemctl, "--user restart delayed_job.slice"
|
||||||
find_and_execute_task("delayed_job:start")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Kill delayed_job process"
|
desc "Show status of delayed_job process"
|
||||||
task :kill do
|
task :status do
|
||||||
on roles(:worker) do
|
on roles(:worker) do
|
||||||
procs = capture("ps -A -o pid,command").split(/\r\n|\r|\n/).grep(/delayed_job/).map(&:to_i)
|
# systemctl exits with status 3 if the service isn't running.
|
||||||
|
execute :systemctl, "--user status delayed_job.slice", raise_on_non_zero_exit: false
|
||||||
if procs.any?
|
|
||||||
execute "for i in #{procs.join(' ')} ; do kill -s TERM $i ; done"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
after "delayed_job:stop", "delayed_job:kill"
|
|
||||||
before "deploy:started", "delayed_job:stop"
|
before "deploy:started", "delayed_job:stop"
|
||||||
after "deploy:published", "delayed_job:start"
|
after "deploy:published", "delayed_job:start"
|
||||||
|
|||||||
Reference in New Issue
Block a user