我试图将RANCID安装所logging的更改logging下来并发送到我们拥有的内部通信广播系统。 我可以通过netcat直接与之对话,例如这可以工作:
echo "Hello world" | netcat localhost 12345
RANCID通过电子邮件发送更改,所以我试图使用procmail拦截这些电子邮件,并将它们发送到我们的本地pastebin,然后将响应(包含URL)传递给netcat。
我可以在命令行上复制整个stream程如下:
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分配与您编写的方式无关。 尝试这个:
:0b MESSAGE=| cat
此外, URL=...赋值不是一个有效的命令; 你必须将variables赋值重构到配方之外:
URL=`curl --silent -d "text=$testmail" -d "title=Logged Activity" http://paste/api/create` :0 | echo "RANCID logged some changes: $URL" | netcat localhost 12345
…或者你可以通过调用一个shell来使它工作,通常是通过添加一个SHELLMETAS :
:0 # notice semicolon at end | URL=$(curl -d "text=$MESSAGE" -d "title=Logged Activity" http://paste/api/create) \ && echo "RANCID logged some changes: $URL" | netcat localhost 12345 ;
…但我实际上喜欢前者,更可读的select。
如果你能以某种方式重构curl命令行来读取标准input并写入标准输出,这可以变得更加优雅,至less可以避免单独的MESSAGEvariables,甚至可能被重构为一行。