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 !