¿Qué tan difícil puede ser ejecutar un script Ruby al inicio?
Bastante difícil aparentemente:
Estoy usando rvm
y ejecutando Ruby 2.3.0
.
which ruby
devuelve /home/ubuntu/.rvm/rubies/ruby-2.3.0/bin/ruby
La ubicación del script es: /home/redline/sinatra-aggregator/server.rb
. He probado todo tipo de chown
s y chmod
s, tal vez eso tenga algo que ver con eso.
Se inicia el servidor. ¿Cómo hago para que se ejecute sudo ruby server.rb
? Ni siquiera necesito el sudo.
Hay alrededor de diez millones de tutoriales sobre cómo hacerlo usando upstart, rc.local o init.d y no sé qué estoy haciendo porque ninguno funcionó. Incluso probé crontab.
Actualmente, mi crontab -e
aspecto es el siguiente:
@reboot /home/ubuntu/start.sh
/home/ubuntu/start.sh:
/home/ubuntu/.rvm/rubies/ruby-2.3.0/bin/ruby /home/ubuntu/sinatra-aggregator/server.rb >> log.txt
Por cierto, log.txt siempre está vacío.
Probé configuraciones similares con rc.local
yinit.d
Editar:
Intenté ejecutar el software con nohup
, funcionó bien, pero aquí está el resultado del registro:
== Sinatra (v1.4.7) has taken the stage on 3000 for production with backup from Thin
== Sinatra has ended his set (crowd applauds)
Starting //Blueline Scraper!
Thin web server (v1.6.4 codename Gob Bluth)
Maximum connections set to 1024
Listening on 0.0.0.0:3000, CTRL+C to stop
Stopping ...
Stopping ...
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- sinatra (LoadError)
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from server.rb:2:in `<main>'
ubuntu@ip-172-31-35-95:~/sinatra-aggregator$
Te apuesto cualquier cosa a que RVM no proporciona RUTA de alguna manera a las gemas que necesito, ya que no solo existen en el sistema sino que también están instaladas en paquete. ¿Debo usarlo bundle exec
en mi @reboot
directiva y, de no ser así, cómo agrego $PATH antes de la ejecución del script?
EDITAR:
Probé la solución de Michael, no funcionó por varias razones explicadas en los comentarios.
Respuesta1
¿Has probado esto?
cron /home/redline/sinatra-aggregator/server.rb
cron restart
y podría funcionar bien de esta manera.