GNU/Linux >> Tutoriales Linux >  >> Linux

Ruby script como servicio

Publicando mi respuesta después de más de una década, el póster original hizo la pregunta.

Primero, vamos a crear un script Ruby simple, que ejecutará un ciclo infinito:

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

Puede ejecutar la secuencia de comandos en segundo plano agregando el ampersand:

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

Para iniciar este script automáticamente y reiniciarlo siempre que se detenga o falle, crearemos un servicio.

# 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

Ahora, copiemos este archivo de servicio al directorio systemd:

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

Finalmente, usa el enable comando para asegurarse de que el servicio se inicia cada vez que se inicia el sistema:

sudo systemctl enable mydaemon.service

El servicio se puede iniciar, detener o reiniciar utilizando systemd estándar comandos:

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

Fuente


RAA - deamons es una herramienta muy útil para crear demonios Unix a partir de scripts Ruby.


De hecho, encontré una forma mucho mejor de hacerlo mediante el uso de secuencias de comandos Ruby.

Así es como lo hice:

En primer lugar, instalé daemon

gem install daemons

Luego hice:

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

Luego creo un archivo llamado runner.rb, en el que puedo llamar a mis scripts como:

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

¡Daemons es una gran joya!


Linux
  1. ¿La forma "adecuada" de probar si un servicio se está ejecutando en un script?

  2. ¿La secuencia de comandos Init.d no se ejecuta en el arranque?

  3. Servicio del sistema operativo Linux 'anacron'

  4. Servicio del sistema operativo Linux 'iptables'

  5. Servicio de sistema operativo Linux 'red'

Cómo configurar la ejecución automática de un script de Python usando Systemd

Cómo ejecutar Shell Script como servicio SystemD en Linux

¿Se agotó el tiempo de espera del servicio Systemctl durante el inicio?

Servicio del sistema operativo Linux 'dhcpd'

Servicio del sistema operativo Linux 'scsi_reserve'

Ejecute el script php como proceso daemon