Quão difícil pode ser executar um script Ruby na inicialização?!
Aparentemente bastante difícil:
Estou usando rvm
e executando Ruby 2.3.0
.
which ruby
retorna /home/ubuntu/.rvm/rubies/ruby-2.3.0/bin/ruby
A localização do script é: /home/redline/sinatra-aggregator/server.rb
. Eu tentei todos os tipos de chown
coisas chmod
sobre isso, talvez isso tenha algo a ver com isso.
O servidor é iniciado. Como faço para que ele funcione sudo ruby server.rb
? Nem precisa do sudo.
Existem cerca de dez milhões de tutoriais sobre como fazer isso usando upstart, rc.local ou init.d e não sei o que estou fazendo porque nenhum deles funcionou. Eu até tentei o crontab.
Atualmente, minha crontab -e
aparência está assim:
@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
A propósito, log.txt está sempre vazio.
Eu tentei configurações semelhantes com rc.local
einit.d
Editar:
Tentei executar o software com nohup
, funcionou bem, mas aqui está a saída do log:
== 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$
Aposto qualquer coisa que o RVM não fornece PATH de alguma forma para as joias que eu preciso, pois elas não apenas existem no sistema, mas também são instaladas em pacote. Devo usar bundle exec
na minha @reboot
diretiva e se não, como adiciono $PATH antes da execução do script?
EDITAR:
Tentei a solução de Michael, não funcionou por vários motivos explicados nos comentários.
Responder1
Você já tentou isso:
cron /home/redline/sinatra-aggregator/server.rb
cron restart
e pode funcionar bem dessa maneira.