Publicando mi respuesta después de más de una década, el póster original hizo la pregunta.
Primero, vamos a crear un script Ruby simple, que ejecutará un ciclo infinito:
# mydaemon.rb
$stdout.reopen('/home/rmishra/mydaemon.log', 'a')
$stdout.sync = true
loop.with_index do |_, i|
puts i
sleep(3)
end
Puede ejecutar la secuencia de comandos en segundo plano agregando el ampersand:
/home/rmishra$ ruby mydaemon.rb &
[1] *pid*
Para iniciar este script automáticamente y reiniciarlo siempre que se detenga o falle, crearemos un servicio.
# mydaemon.service
[Unit]
Description=Simple supervisor
[Service]
User=username
Group=username
WorkingDirectory=/home/username
Restart=always
ExecStart=/usr/bin/ruby mydaemon.rb
[Install]
WantedBy=multi-user.target
Ahora, copiemos este archivo de servicio al directorio systemd:
sudo cp mydaemon.service /lib/systemd/system -v
Finalmente, usa el enable
comando para asegurarse de que el servicio se inicia cada vez que se inicia el sistema:
sudo systemctl enable mydaemon.service
El servicio se puede iniciar, detener o reiniciar utilizando systemd
estándar comandos:
sudo systemctl status mydaemon
sudo systemctl start mydaemon
sudo systemctl stop mydaemon
sudo systemctl restart mydaemon
Fuente
RAA - deamons es una herramienta muy útil para crear demonios Unix a partir de scripts Ruby.
De hecho, encontré una forma mucho mejor de hacerlo mediante el uso de secuencias de comandos Ruby.
Así es como lo hice:
En primer lugar, instalé daemon
gem install daemons
Luego hice:
require 'rubygems'
require 'daemons'
pwd = File.dirname(File.expand_path(__FILE__))
file = pwd + '/runner.rb'
Daemons.run_proc(
'my_project', # name of daemon
:log_output => true
) do
exec "ruby #{file}"
end
Luego creo un archivo llamado runner.rb, en el que puedo llamar a mis scripts como:
require "/var/www/rails/my_project/config/environment"
Post.send('details....')
¡Daemons es una gran joya!