在启动时运行 ruby 脚本有多难?!
显然相当艰难:
我正在使用rvm
并运行 ruby2.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 进行此操作的教程有大约一千万个,但我不知道自己在做什么,因为没有一个能起作用。我甚至尝试了 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 不会以某种方式为我需要的 gem 提供 PATH,因为它们不仅存在于系统中,而且是捆绑安装的。我应该bundle exec
在@reboot
指令中使用吗?如果不行,如何在脚本执行前添加 $PATH?
编辑:
尝试了迈克尔的解决方案,但由于评论中解释的各种原因,没有奏效。
答案1
您是否尝试过这个:
cron /home/redline/sinatra-aggregator/server.rb
cron restart
这样也许能很好地发挥作用。