Неужели так сложно запустить скрипт Ruby при запуске?!
Судя по всему, довольно жестко:
Я использую rvm
и запускаю Ruby 2.3.0
.
which ruby
возвращает /home/ubuntu/.rvm/rubies/ruby-2.3.0/bin/ruby
Расположение скрипта: /home/redline/sinatra-aggregator/server.rb
. Я пробовал всевозможные chown
s и chmod
s, возможно, это как-то связано.
Сервер запускается. Как мне его запустить sudo ruby server.rb
? Даже sudo не нужен.
Есть около десяти миллионов руководств о том, как это сделать с помощью upstart, rc.local или init.d, и я не знаю, что я делаю, потому что ни одно из них не сработало. Я даже пробовал crontab.
На данный момент мой crontab -e
выглядит так:
@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
Кстати, log.txt всегда пуст.
Я пробовал похожие настройки с rc.local
иinit.d
Редактировать:
Я попробовал запустить программу с помощью nohup
, все получилось, но вот вывод журнала:
== 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$
Я готов поспорить, что это RVM каким-то образом не предоставляет PATH для нужных мне gems, поскольку они не только существуют в системе, но и устанавливаются в пакете. Должен ли я использовать bundle exec
в своей @reboot
директиве, и если нет, то как мне добавить $PATH перед выполнением скрипта?
РЕДАКТИРОВАТЬ:
Попробовал решение Майкла, но оно не сработало по разным причинам, описанным в комментариях.
решение1
Пробовали ли вы это:
cron /home/redline/sinatra-aggregator/server.rb
cron restart
и это может хорошо работать таким образом.