Wie schwierig kann es sein, beim Start ein Ruby-Skript auszuführen?!
Anscheinend ziemlich hart:
Ich verwende rvm
und führe Ruby aus 2.3.0
.
which ruby
gibt zurück. /home/ubuntu/.rvm/rubies/ruby-2.3.0/bin/ruby
Der Skriptspeicherort ist: /home/redline/sinatra-aggregator/server.rb
. Ich habe alle möglichen chown
s und chmod
s ausprobiert, vielleicht hat das etwas damit zu tun.
Der Server startet. Wie kann ich ihn starten sudo ruby server.rb
? Ich brauche nicht einmal sudo.
Es gibt ungefähr zehn Millionen Tutorials, wie man es mit Upstart, rc.local oder init.d macht, und ich weiß nicht, was ich tue, weil kein einziges davon funktioniert hat. Ich habe es sogar mit Crontab versucht.
Momentan crontab -e
sieht meins so aus:
@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 ist übrigens immer leer.
Ich habe ähnliche Setups ausprobiert rc.local
undinit.d
Bearbeiten:
Ich habe versucht, die Software mit auszuführen nohup
. Das hat funktioniert. Hier ist jedoch die Ausgabe des Protokolls:
== 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$
Ich wette mit Ihnen, dass RVM irgendwie keinen PATH für die Gems bereitstellt, die ich brauche, da sie nicht nur auf dem System vorhanden sind, sondern auch als Bundle installiert sind. Soll ich es bundle exec
in meiner @reboot
Direktive verwenden und wenn nicht, wie füge ich $PATH vor der Skriptausführung hinzu?
BEARBEITEN:
Habe Michaels Lösung ausprobiert, hat aus verschiedenen, in den Kommentaren erläuterten Gründen nicht funktioniert.
Antwort1
Haben Sie Folgendes versucht:
cron /home/redline/sinatra-aggregator/server.rb
cron restart
und auf diese Weise könnte es gut funktionieren.