我想在启动时使用以下命令启动我的Rails服务器:
cd /home/ubuntu/app && bundle exec rails server -p 8080 -e production
我将它放在/etc/rc.local中,但它从不启动服务器。如果我删除bundle exec
,那么shell会抱怨没有找到rails
命令。
如果我登录并且手动执行,则使用和不使用bundle exec
的两种变体都可以使用。
我完全迷失了。有什么建议吗?
答案 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'