我正在尝试让我们的 RANCID 安装记录的更改被记录并发送到我们拥有的内部通信广播系统。我可以通过 netcat 直接与之对话,例如这将起作用:
echo "Hello world" | netcat localhost 12345
RANCID 通过电子邮件发送更改,因此我尝试使用 procmail 拦截这些电子邮件并将它们发送到我们本地的 pastebin,然后将响应(包含 URL)通过管道传输到 netcat。
我可以在命令行上复制整个流程,如下所示:
testmail=$(cat testmail.txt)
URL=$(curl --silent -d "text=$testmail" -d "title=Logged Activity" http://paste/api/create) && echo "RANCID logged some changes: $URL" | netcat localhost 12345
这是我现在的 .procmailrc:
## store the body in MESSAGE
:0 b
MESSAGE=|
##Send that message to Wirehive pastebin
:0
| URL=$(curl -d "text=$MESSAGE" -d "title=Logged Activity" http://paste/api/create) && echo "RANCID logged some changes: $URL" | netcat localhost 12345
检查邮件日志,邮件路由工作正常。将文件全部注释掉并检查 mutt 中的接收用户邮箱后,我可以看到消息进来了。文件取消注释后,消息不会出现在邮箱中,因此正在处理 .procmailrc 并将消息传递给它。
可能值得注意的是这是在 Ubuntu 12.04 上。
MESSAGE
作业不像你写的那样工作。尝试这个:此外,
URL=...
分配不是有效命令;您必须将变量赋值重构到配方之外:...或者您可以通过调用 shell 来使其工作,通常是通过添加以下之一
SHELLMETAS
:...但我实际上更喜欢前者,更具可读性。
如果你能以某种方式重构
curl
命令行以读取标准输入并写入标准输出,这可能会变得更优雅,至少可以避免单独的MESSAGE
变量,甚至可能被重构为一个单行代码。