GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ruby-Skript als Dienst

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

installiert
gem 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!


Linux
  1. Der „richtige“ Weg, um zu testen, ob ein Dienst in einem Skript ausgeführt wird?

  2. Linux – Speicherort des Fsck-Skripts?

  3. Einzeiler vs. Drehbuch?

  4. Linux-Betriebssystemdienst „iptables“

  5. Linux-Betriebssystemdienst „Netzwerk“

So richten Sie die automatische Ausführung eines Python-Skripts mit Systemd ein

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

Linux-Betriebssystemdienst „dhcpd“

Linux-Betriebssystemdienst „anacron“

Linux-Betriebssystemdienst „scsi_reserve“

Was ist erforderlich, damit ein Linux-Dienst von chkconfig unterstützt wird?