Wie führt man ein Ruby-Skript in Ubuntu automatisch aus?

Wie führt man ein Ruby-Skript in Ubuntu automatisch aus?

Wie schwierig kann es sein, beim Start ein Ruby-Skript auszuführen?!

Anscheinend ziemlich hart:

Ich verwende rvmund führe Ruby aus 2.3.0.

which rubygibt 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 chowns und chmods 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 -esieht 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.localundinit.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 execin meiner @rebootDirektive 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.

verwandte Informationen