procmail没有正确执行脚本

时间:2011-04-20 22:04:07

标签: linux scripting centos procmail

我遇到一个奇怪的问题,就是从procmail本地发送的传入邮件中运行脚本(perl和ruby失败)。

系统是CentOS 5.5,后缀是我的邮件程序,然后是.forward设置为发送电子邮件到procmail。 .procmailrc和脚本与Ubuntu服务器上的工作设置相同。

这是.procmailrc:

PATH= /usr/local/bin:/usr/bin:${PATH}
SHELL=/bin/bash
MAILDIR=$HOME/Maildir
DEFAULT=${MAILDIR}/
LOGABSTRACT=yes
LOGFILE=$HOME/Maildir/proclog
VERBOSE=YES

:0 wc
* ^To.*web@mydomain.com
| /home/web/perltest.pl

这是perl脚本:

#!/usr/bin/env perl

system("touch /home/web/touchedfile");

然后收到电子邮件时记录失败:

procmail: Executing "/home/web/perltest.pl"
/home/web/perltest.pl: line 3: syntax error near unexpected token `"touch /home/web/touchedfile"'
/home/web/perltest.pl: line 3: `system("touch /home/web/touchedfile");'

行结尾都是UNIX。脚本从命令行运行良好。

如果我直接从命令行管道procmail,整个设置工作正常,但当它作为本地传递过程的一部分被调用时,#!在剧本中似乎忽略了一行。

如果我在管道中显式执行perl,我可以运行perl脚本,如下所示:

:0 wc
* ^To.*web@mydomain.com
| perl /home/web/perltest.pl

...但我真的不想承认失败而且那样做。

1 个答案:

答案 0 :(得分:1)

问题是selinux,如果你关闭它应该工作。我不确定如何在启用selinux的情况下修复它。

这是修复它的方法,但仍然运行selinux。在perl或ruby脚本上运行chcon system_u:object_r:procmail_exec_t。我已经确认这是一个修复,但我对selinux不够熟悉,以确保它是“正确的”修复。