Question

J'ai deux rubis scripts de serveur, powerupserver.rb et outputserver.rb, de la forme:

require '/Library/WebServer/sample_app/config/environment'
# more requires

@server = TCPServer.open(port_number)                          
loop do                                                 
  Thread.start(@server.accept) do |sock| 
    # do stuff
  end
end

Dans le développement, j'ai utiliser Contremaître pour les exécuter et qui fonctionne très bien.Maintenant, je suis en train de lancer et de suivre dans l'arrière-plan comme des démons avec Bluepill.J'ai choisi Bluepill, principalement parce que Foreman a une option d'exportation vers un Bluepill fichier de configuration (.pilule fichier).Donc je l'ai fait et ensuite modifié l' .pilule de fichiers que nécessaire pour obtenir le texte suivant:

Bluepill.application("sample_app", :foreground => false, :log_file => "/var/bluepill/log/bluepill.log") do |app|

  app.process("powerupserver") do |process|
    process.start_command = "ruby powerupserver.rb"
    process.working_dir = "/Library/WebServer/sample_app"
    process.pid_file = "/var/bluepill/pids/powerupserver-1.pid"
    process.daemonize = true
    process.stdout = process.stderr = "/var/bluepill/log/powerupserver-1.log"

    process.start_grace_time = 3.seconds
    process.stop_grace_time = 5.seconds
    process.restart_grace_time = 8.seconds
    process.stop_signals = [:quit, 30.seconds, :term, 5.seconds, :kill]

    process.checks :cpu_usage, :every => 10.seconds, :below => 5, :times => 3
    process.checks :mem_usage, :every => 10.seconds, :below => 100.megabytes, :times => [3,5]
    process.checks :flapping, :times => 2, :within => 30.seconds, :retry_in => 7.seconds

  end

  # more lines here mimicking above, but for server script 'outputserver.rb'
end

Lorsque je charge ce .pilule, et de vérifier l'état (sudo bluepill état), je vois:

$ sudo bluepill status
powerupserver(pid:0): up
outputserver(pid:0): up

De sorte qu'il est censé être en place (quoique avec les pid de 0?qui certainement ne semble pas bon), mais je peux voir qu'ils ne sont pas en cours d'exécution/faire ce qu'ils sont censés faire.Quelqu'un pourrait-il avec Bluepill connaissances m'aider à comprendre ce que je fais de mal?Merci beaucoup à l'avance!

Était-ce utile?

La solution

J'ai fini par utiliser les Démons ruby gem à daemonize mes scripts et à l'aide de Bluepill pour les surveiller.Je sais que vous pouvez le faire en utilisant seulement Bluepill, mais je ne pouvais pas comprendre à l'époque et mon système a été fonctionne correctement.Je suis à l'aide de Rails 3.0.3, les Démons 1.1.5 et Bluepill 0.0.51.Donc, tout d'abord, assurez-vous que vous avez les Démons et Bluepill installé.

Donc, disons que nous avons myserver.rb, un ruby script serveur de vie à l'intérieur de mon application rails de la racine.Afin de daemonize avec les Démons, créer myserver_control.rb dans le dossier racine de dire les Démons comment daemonize:

# myserver_control.rb
require 'rubygems'
require 'daemons'

@options = {
    :dir_mode => :normal,
    :dir => '/Library/WebServer/myrailsapp/pids',
    :multiple => true,
    :backtrace => true,
    :monitor => false,
    :log_dir => '/Library/WebServer/myrailsapp/log',
    :log_output => true
}

Daemons.run('myserver.rb', @options)

Découvrez le Démon de la documentation pour en savoir plus sur les options de hachage.Vous pouvez maintenant exécuter votre démon de l'intérieur de votre application rails dossier racine à la ligne de commande à l'aide de 'sudo ruby myserver_control.rb démarrer".C'est le démon de démarrage de commande que vous pouvez mettre dans votre Bluepill fichier de config (myrailsapp.pilule fichier) comme suit:

Bluepill.application("myrailsapp", :foreground => false, :log_file => "/Library/WebServer/myrailsapp/log/bluepill.log") do |app|

  app.process("myserver") do |process|

    process.start_command = "sudo ruby myserver_control.rb start"
    process.stop_command = "sudo ruby myserver_control.rb stop"
    process.restart_command = "sudo ruby myserver_control.rb restart"

    process.pid_file = "/Library/WebServer/myrailsapp/pids/myserver.rb0.pid"

    process.working_dir = "/Library/WebServer/myrailsapp"

    process.start_grace_time = 5.seconds
    process.stop_grace_time = 5.seconds
    process.restart_grace_time = 8.seconds

  end
end

Certainement aller lire sur le Bluepill de la documentation pour tous les voir de nombreuses options.Ensuite, lorsque vous démarrez Bluepill vous avez suivi démon.Assurez-vous que tous les dossiers référencés dans les exemples ci-dessus existent (par ex.pids).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top