Zveřejnění mé odpovědi po více než deseti letech původní plakát položil otázku.
Nejprve si vytvořte jednoduchý rubínový skript, který bude spouštět nekonečnou smyčku:
# mydaemon.rb
$stdout.reopen('/home/rmishra/mydaemon.log', 'a')
$stdout.sync = true
loop.with_index do |_, i|
puts i
sleep(3)
end
Skript můžete spustit na pozadí přidáním ampersand:
/home/rmishra$ ruby mydaemon.rb &
[1] *pid*
Abychom tento skript spustili automaticky a restartovali jej vždy, když byl zastaven nebo zhroucen, vytvoříme službu.
# 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
Nyní zkopírujeme tento soubor služby do adresáře systemd:
sudo cp mydaemon.service /lib/systemd/system -v
Nakonec použijte enable
příkaz, který zajistí, že se služba spustí při každém spuštění systému:
sudo systemctl enable mydaemon.service
Službu lze spustit, zastavit nebo restartovat pomocí standardního systemd
příkazy:
sudo systemctl status mydaemon
sudo systemctl start mydaemon
sudo systemctl stop mydaemon
sudo systemctl restart mydaemon
Zdroj
RAA - deamons je ověřený užitečný nástroj pro vytváření unixových démonů z ruby skriptů.
Vlastně jsem našel mnohem lepší způsob, jak toho dosáhnout pomocí ruby skriptů.
Udělal jsem to takto:
Nejprve jsem nainstaloval daemon
gem install daemons
Pak jsem udělal:
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
Poté vytvořím soubor s názvem runner.rb, ve kterém mohu volat své skripty, například:
require "/var/www/rails/my_project/config/environment"
Post.send('details....')
Démoni jsou skvělý klenot!