Posting meiner Antwort nach mehr als einem Jahrzehnt Original Poster stellte die Frage.
Lassen Sie uns zuerst ein einfaches Ruby-Skript erstellen, das eine Endlosschleife ausführt:
# mydaemon.rb
$stdout.reopen('/home/rmishra/mydaemon.log', 'a')
$stdout.sync = true
loop.with_index do |_, i|
puts i
sleep(3)
end
Sie können das Skript im Hintergrund ausführen, indem Sie das kaufmännische Und anhängen:
/home/rmishra$ ruby mydaemon.rb &
[1] *pid*
Um dieses Skript automatisch zu starten und neu zu starten, wenn es gestoppt oder abgestürzt ist, erstellen wir einen Dienst.
# 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
Kopieren wir nun diese Dienstdatei in das systemd-Verzeichnis:
sudo cp mydaemon.service /lib/systemd/system -v
Verwenden Sie schließlich den enable
Befehl, um sicherzustellen, dass der Dienst bei jedem Systemstart gestartet wird:
sudo systemctl enable mydaemon.service
Der Dienst kann mit Standard systemd
gestartet, gestoppt oder neu gestartet werden Befehle:
sudo systemctl status mydaemon
sudo systemctl start mydaemon
sudo systemctl stop mydaemon
sudo systemctl restart mydaemon
Quelle
RAA - Deamons ist ein sehr nützliches Tool zum Erstellen von Unix-Daemons aus Ruby-Skripten.
Ich habe tatsächlich einen viel besseren Weg dafür gefunden, indem ich Ruby-Skripte verwende.
So habe ich es gemacht:
Als erstes habe ich daemon
installiertgem install daemons
Dann habe ich:
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
Ich erstelle dann eine Datei namens runner.rb, in der ich meine Skripte aufrufen kann, wie zum Beispiel:
require "/var/www/rails/my_project/config/environment"
Post.send('details....')
Daemons ist ein großartiges Juwel!