Ubuntu在启动时启动Rails

时间:2014-12-09 02:19:50

标签: ruby bash shell unix ubuntu

我想在启动时使用以下命令启动我的Rails服务器:

cd /home/ubuntu/app && bundle exec rails server -p 8080 -e production

我将它放在/etc/rc.local中,但它从不启动服务器。如果我删除bundle exec,那么shell会抱怨没有找到rails命令。

如果我登录并且手动执行,则使用和不使用bundle exec的两种变体都可以使用。

我完全迷失了。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

尝试更改用户

su ubuntu && cd /home/ubuntu/app && bundle exec rails server -p 8080 -e production

答案 1 :(得分:0)

以root身份运行脚本不是一个好主意,因此您希望在启动代码之前更改用户。

su确实是你想要使用的命令,但你需要意识到所有参数都传递给了登录shell。因此,以下工作无效(假设fofox是您的用户名):

su fofox pwd

正如你有效地说的那样

/bin/bash /bin/pwd

但是/bin/pwd不包含shell命令列表,因此两者都会给出错误消息:

/bin/pwd: /bin/pwd: cannot execute binary file

因此,您需要向shell添加一些内容,说明您正在传递命令列表,如下所示:

/bin/bash -c /bin/pwd

最后一个问题是,您希望将多个参数传递给su命令,但保护它们不受shell的影响,如

su fofox -c id && id

将显示第一位作为fofox执行,第二部分再次作为root执行。单引号用于防止root shell看到&&个字符。

所以最后的命令变为:

su fofox -c 'cd /home/ubuntu/app && bundle exec rails server -p 8080 -e production'
相关问题