起動時に 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
やchmod
を試してみましたが、おそらくそれが関係しているのでしょう。
サーバーが起動します。どうすれば実行できますかsudo ruby server.rb
? sudo も必要ありません。
upstart、rc.local、init.d を使ってこれを行う方法に関するチュートリアルは 1000 万件ほどありますが、どれも機能しないので何をやっているのかわかりません。crontab も試しました。
現在、私のcrontab -e
見た目は次のようになります:
@reboot /home/ubuntu/start.sh
Ubuntuを起動します。
/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$
おそらく、必要な gem がシステム上に存在するだけでなくバンドル インストールされているため、RVM が何らかの方法で PATH を提供していないのだと思います。ディレクティブbundle exec
で を使用する必要があります@reboot
か。使用しない場合は、スクリプトの実行前に $PATH を追加するにはどうすればよいでしょうか。
編集:
Michael の解決策を試しましたが、コメントで説明されているさまざまな理由により機能しませんでした。
答え1
これを試しましたか:
cron /home/redline/sinatra-aggregator/server.rb
cron restart
この方法ではうまくいくかもしれません。