collectiveidea / delayed_job

Database based asynchronous priority queue system -- Extracted from Shopify
http://groups.google.com/group/delayed_job
MIT License
4.81k stars 955 forks source link

Add Delayed::Plugins::Pidfile #1202

Open jdufresne opened 5 months ago

jdufresne commented 5 months ago

The new plugin creates a pidfile at location #{Rails.root}/tmp/delayed_job.pid when a worker starts and then removes it when a worker stops. It uses lifecycle.around(:execute) to achieve this.

The file is created in "write exclusive" mode. This means if the file already exists, Errno::EEXIST is raised. This ensures that a worker doesn't overwrite a pidfile in use.

This plugin is useful to allow an outside observer (e.g. a healthcheck) to check if the worker started successfully.

The plugin is not installed by default for backwards compatibility. Users can use it by adding to their initializer:

Delayed::Worker.plugins << Delayed::Plugin::Pidfile

refs #875