GNU/Linux >> Znalost Linux >  >> Linux

Ruby skript jako služba

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!


Linux
  1. Linux – umístění skriptu Fsck?

  2. Vypršel časový limit služby Systemctl během spouštění?

  3. Služba OS Linux „scsi_reserve“

  1. Jak napsat spouštěcí skript pro Systemd?

  2. Spusťte php skript jako proces démona

  3. Co je potřeba, aby chkconfig podporovala linuxovou službu?

  1. Způsobit spuštění skriptu po spuštění sítě?

  2. „Správný“ způsob, jak otestovat, zda služba běží ve skriptu?

  3. Skript Init.d není spuštěn při spouštění?