繁体   English   中英

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

[英]Pipe to program fails, but runs OK in SSH console

我正在尝试让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身份运行,因为RVM环境变量对于root不存在。 以root用户身份登录时,在SSH控制台中运行第一个命令是可行的,但exim收到电子邮件时则不能运行。

您不能在不进行转义的情况下在双引号内进行双引号。 一旦开始转义引号,知道何时还需要转义其他字符可能会变得很复杂。 您的示例似乎并不太复杂,但是我建议使用另一种方法。

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

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

确保使脚本可执行,并且供exim调用的用户可运行。 如果您将脚本模式设置为755(由root拥有),则足够了。

要解决此问题,我需要做一些事情:

1)按照Todd的建议将运行程序脚本移到其自己的文件中; 嵌套引号导致脚本无法运行。

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

3)即使exim使用我的用户名执行脚本,也完全没有设置PATH和HOME等环境变量! 这导致ruby成为未知命令。 这引起了许多其他问题,因为大多数应用程序都依赖RVM及其gemset。 因此,我无法运行红宝石,更不用说铁路了。 即使我要显式调用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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM