Pubblicando la mia risposta dopo più di un decennio Original Poster ha posto la domanda.
Per prima cosa, creiamo un semplice script ruby, che eseguirà 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
Puoi eseguire lo script in background aggiungendo la e commerciale:
/home/rmishra$ ruby mydaemon.rb &
[1] *pid*
Per avviare automaticamente questo script e riavviarlo ogni volta che è stato interrotto o è andato in crash, creeremo un servizio.
# 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
Ora copiamo questo file di servizio nella directory systemd:
sudo cp mydaemon.service /lib/systemd/system -v
Infine, usa enable
comando per garantire che il servizio venga avviato all'avvio del sistema:
sudo systemctl enable mydaemon.service
Il servizio può essere avviato, interrotto o riavviato utilizzando lo standard systemd
comandi:
sudo systemctl status mydaemon
sudo systemctl start mydaemon
sudo systemctl stop mydaemon
sudo systemctl restart mydaemon
Fonte
RAA - deamons è uno strumento molto utile per creare demoni unix da script Ruby.
In realtà ho trovato un modo molto migliore per farlo usando gli script Ruby.
Ecco come l'ho fatto:
Prima di tutto, ho installato il demone
gem install daemons
Poi ho fatto:
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
Quindi creo un file chiamato runner.rb, in cui posso chiamare i miei script come:
require "/var/www/rails/my_project/config/environment"
Post.send('details....')
Daemons è una grande gemma!