GNU/Linux >> Tutoriels Linux >  >> Linux

Script Ruby en tant que service

Publier ma réponse après plus d'une décennie L'affiche originale a posé la question.

Commençons par créer un simple script ruby, qui exécutera une boucle infinie :

# mydaemon.rb 
$stdout.reopen('/home/rmishra/mydaemon.log', 'a')
$stdout.sync = true
loop.with_index do |_, i|
  puts i
  sleep(3)
end

Vous pouvez exécuter le script en arrière-plan en ajoutant une esperluette :

/home/rmishra$ ruby mydaemon.rb &
[1] *pid*

Pour démarrer ce script automatiquement et le redémarrer chaque fois qu'il a été arrêté ou planté, nous allons créer un service.

# 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

Maintenant, copions ce fichier de service dans le répertoire systemd :

sudo cp mydaemon.service /lib/systemd/system -v

Enfin, utilisez le enable commande pour s'assurer que le service démarre à chaque démarrage du système :

sudo systemctl enable mydaemon.service

Le service peut être démarré, arrêté ou redémarré à l'aide de la norme systemd commandes :

sudo systemctl status mydaemon
sudo systemctl start mydaemon
sudo systemctl stop mydaemon
sudo systemctl restart mydaemon

Source


RAA - deamons est un outil très utile pour créer des démons Unix à partir de scripts ruby.


J'ai en fait trouvé une bien meilleure façon de le faire en utilisant des scripts ruby.

Voici comment j'ai procédé :

Tout d'abord, j'ai installé le démon

gem install daemons

Alors j'ai fait :

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

Je crée ensuite un fichier appelé runner.rb, dans lequel je peux appeler mes scripts tels que :

require "/var/www/rails/my_project/config/environment"
Post.send('details....')

Daemons est un super bijou !


Linux
  1. Comment écrire un script de démarrage pour Systemd ?

  2. provoquer l'exécution d'un script après le démarrage de la mise en réseau ?

  3. La "bonne" façon de tester si un service s'exécute dans un script ?

  4. Le script Init.d n'est pas exécuté au démarrage ?

  5. Exécuter le script php en tant que processus démon

Comment configurer l'exécution automatique d'un script Python à l'aide de Systemd

Comment exécuter un script Shell en tant que service SystemD sous Linux

Service de système d'exploitation Linux "réseau"

Service d'exploitation Linux "portmap"

Service du système d'exploitation Linux "scsi_reserve"

Que faut-il pour qu'un service Linux soit pris en charge par chkconfig ?