管道编程失败,但在SSH控制台中运行正常

时间:2014-04-27 21:29:17

标签: linux ruby-on-rails-4 pipe exim

我正在尝试让Rails 4.1收到退回电子邮件,但实际上很难达到这一点。当我以root身份登录时,我可以在SSH控制台中运行以下命令,但是当我将它放在我的/ etc / valiases文件中时,我会从脚本中反弹说“以下地址失败”。

runuser -l useraccount -c "cd /home/useraccount/rails_deployments/dev.www/current/bin && rails runner -e development 'EBlast.receive(STDIN.read)'"

/etc/valiases/dev.mydomain.com

eblast-bounce@dev.mydomain.com: "|runuser -l useraccount -c "cd /home/useraccount/rails_deployments/dev.www/current/bin && rails runner -e development 'EBlast.receive(STDIN.read)'""

我也试过逃避双引号无济于事。

我需要以useraccount运行,因为root用户不存在RVM环境变量。以root用户身份登录时,在SSH控制台中运行第一个命令,但在exim收到电子邮件时则不行。

2 个答案:

答案 0 :(得分:0)

如果不进行一些转义,你不能在双引号内双引号。一旦你开始转义引号,它就会变得复杂,知道你何时还需要转义其他字符。你的例子看起来并不太复杂,但我建议采用不同的方法。

恕我直言,您应该使用您想要运行的管道命令创建一个shell脚本,例如 eblast-bounce-script 。然后将别名设置为:

eblast-bounce@dev.mydomain.com: "|/path/to/eblast-bounce-script"

确保使脚本可执行,并由exim将其调用的用户运行。如果你使root拥有的脚本模式755就足够了。

答案 1 :(得分:0)

我必须做一些事情来解决这个问题:

1)将跑步者脚本移动到Todd suggested的自己的文件中;嵌套引号导致脚本无法运行。

2)使文件可执行;权限已设置为755。

3)尽管exim使用我的用户名来执行脚本,但是根本没有设置PATH和HOME等环境变量!这导致ruby成为未知命令。这导致了许多其他问题,因为大多数应用程序依赖于RVM及其gemsets。所以我无法运行ruby,更不用说rails了。即使我要显式调用ruby包装器,spring也会因为$HOME未设置而中断。只是一系列问题,因为没有设置用户环境。我也无法发出su - username -c 'whatever',因为exim使用的帐户无权使用su


所以工作设置如下:

<强> /etc/valiases/dev.mydomain.com

eblast-bounce@dev.mydomain.com: "|/bin/bash -l -c '/home/useraccount/rails_deployments/dev.www/current/script/receive_eblast_bounce'"
*: ":fail: No Such User Here"

<强> /home/useraccount/rails_deployments/dev.www/current/script/receive_eblast_bounce

D=`pwd`

HOME=/home/useraccount

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

if [[ -s "/home/useraccount/.rvm/scripts/rvm" ]] ; then
  source "/home/useraccount/.rvm/scripts/rvm"
fi

cd /home/useraccount/rails_deployments/dev.www/current
./bin/rails runner -e development 'EBlast.receive(STDIN.read)'

cd $D

我现在遇到使用SSL的ActionMailer有问题,我不知道这是否与我在这里做的事情有关,但至少它执行了rails脚本。