[英]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.